按城市显示阵列数据


display array data by city

我有一个具有以下结构的数组:

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"} 
    }

如何按以下顺序显示阵列数据:

伦敦

John | Charles

巴黎

Alan|Wayne

这可以用一个唯一的多维数组来完成吗?还是应该用另一个数组来选择不同的城市?

我说的是一个类似循环的东西:

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

感谢

将您的城市分组到一个新的数组中,然后将其吐出

$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>';
}

作为中间步骤,创建一个新的关联数组可能会很方便。这种方法并不关心城市最初是否分组。

$cities = array();
foreach ($original_array as $entry) {
    $cities[$entry[0]][] = $entry[1];
}

新数组将包含作为关键字的城市名称,以及作为每个城市对应值的人名数组。类似:

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

所以现在你可以做了

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

试试这个

$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/>';
}

我认为这可能有助于

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

由于城市总是按照您指定的方式分组,因此只需要一个额外的变量即可正确执行此操作。假设您的输入数组被称为$people:

$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

不需要额外的关联数组。请注意,这可能是更语义化的标记:

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

在这种情况下,上面的代码将是:

$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