2012-04-01 42 views
2

Ich habe ein Array mit dieser Struktur:Anzeige Arraydaten von Stadt

array(4) { 
    [0]=> array(x) { 
     [0]=> string(x)"London" 
     [1]=> string(xx) "John"} 
    [1]=> array(x) { 
     [0]=> string(x)"London" 
     [1]=> string(xx) "Charles"} 
    [2]=> array(x) { 
     [0]=> string(x)"Paris" 
     [1]=> string(xx) "Alan"} 
    [3]=> array(x) { 
     [0]=> string(x)"Paris" 
     [1]=> string(x) "Wayne"} 
    } 

Wie kann ich die Array-Daten in dieser Reihenfolge angezeigt werden:

London

John | Charles

Paris

Alan | Wayne

Dies kann mit einem einzigartigen mehrdimensionalen Array getan werden? oder sollte ich ein anderes Array haben, um verschiedene Städte auszuwählen?

Ich spreche über etwas wie eine Schleife mit:

foreach ($cities as $city) { 
    echo '<div class="city">'.$city.'</div>'; 
     for() { 
      echo '<div class="persons">'.$persons.'</div>'; 
     } 
} 

dank

+0

Werden die gruppiert Städte zusammen im ursprünglichen Array? Oder möchten Sie ein neues Array erstellen? – mikevoermans

+0

@mikevoermans, ja die Städte sind in der ursprünglichen Anordnung gruppiert. – user947462

Antwort

2

Gruppe Ihre Städte in einem neuen Array, dann ausspucken

$newCities = array(); 

foreach ($cities as $city) { 
    $newCities[$city[0]][] = $city[1]; 
} 

foreach($newCities as $city => $persons) { 
    echo '<div class="city">' . $city . '</div>'; 

    // use join to glue the pieces together 
    echo '<div class="persons">' . join(' | ', $persons) . '</div>'; 

} 
2

Es könnte praktisch sein, ein neues assoziatives Array als Zwischenschritt zu erstellen. Diese Methode interessiert nicht, ob die Städte ursprünglich gruppiert sind oder nicht.

Das neue Array enthält Stadtnamen als Schlüssel und eine Reihe von Personen als entsprechende Werte für jede Stadt. Wie:

array(2) { 
    ["London"]=> array(2) { 
     [0]=> "John" 
     [1]=> "Charles" } 
    ["Paris"]=> array(2) { 
     [0]=> "Alan" 
     [1]=> "Wayne" } 
} 

So, jetzt können Sie tun

foreach ($cities as $city_name => $people) { 
    echo '<div class="city">'.$city_name.'</div>'; 
    foreach ($people as $person) { 
     echo '<div class="person">'.$person.'</div>'; 
    } 
} 
0

ich denke, es kann helfen,

foreach ($cities as $city) { 
     echo '<div class="city">'.$city.'</div>'; 
      foreach ($cities as $city1) { 
      if ($city==$city1){ 
       echo '<div class="persons">'.$persons.'</div>'; 
       } 
      } 
    } 
0

Da Städte immer wie angegeben gruppiert sind, Sie benötigen nur eine zusätzliche Variable, um dies richtig zu machen. Angenommen, Ihr Eingabefeld wird $people genannt:

$last_city = ''; 
foreach ($people as $person) { 
    if ($person[0] != $last_city) { 
     if ($last_city != '') echo '</div>'; // Close opened persons block 

     $last_city = $person[0]; 
     echo '<div class="city">' . $last_city . '</div>'; 
     echo '<div class="persons">'; 
    } 
    else echo ' | '; 

    echo $person[1]; 
} 
echo '</div>'; // This assumes there's at least one record in $people 

Kein zusätzliches assoziatives Array erforderlich. Beachten Sie, dass diese Markup mehr semantische sein kann:

<div class="city"> 
    <span>London</span> 
    John | Charles 
</div> 

In diesem Fall wird der obige Code würde:

$last_city = ''; 
foreach ($people as $person) { 
    if ($person[0] != $last_city) { 
     if ($last_city != '') echo '</div>'; // Close opened city block 

     $last_city = $person[0]; 
     echo '<div class="city">'; 
     echo '<span>' . $last_city . '</span>'; 
    } 
    else echo ' | '; 

    echo $person[1]; 
} 
echo '</div>'; // This assumes there's at least one record in $people 
1

Versuchen Sie, diese

$array = array(
      array('0' => array('0' => 'London', '1' => 'John')), 
      array('1' => array('0' => 'London', '1' => 'Charles')), 
      array('2' => array('0' => 'Paris', '1' => 'Alan')), 
      array('3' => array('0' => 'Paris', '1' => 'Wayne')) 


     ); 
$i = 0; 
foreach ($array as $arr1) { 
    foreach ($arr1 as $arr2) { 
     $cities[$arr2[0]][$i] = array($arr2[0],$arr2[1]); 
     $i++; 
    } 
} 

foreach ($cities as $key => $city) { 
    echo '<h2 class="city">'.$key.'</h2>'; 
     foreach($city as $persons) { 
      echo '<div class="persons">'.$persons[1].'</div>'; 
     } 
    echo '<br/>'; 
}