按城市显示数组数据

时间:2012-04-01 03:08:09

标签: php arrays

我有一个具有这种结构的数组:

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

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

伦敦

约翰|查尔斯

巴黎

艾伦|韦恩

这可以通过一个独特的多维数组来完成吗?或者我应该有另一个数组来选择不同的城市?

我说的是一个循环:

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

感谢

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

$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 :(得分:1)

试试这个

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

答案 3 :(得分:0)

我认为这可能会有所帮助

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

答案 4 :(得分:0)

由于城市总是按照您的指定进行分组,因此您只需要一个额外的变量来正确执行此操作。假设您的输入数组被称为$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