如何在PHP中循环遍历数组的数组

如何在PHP中循环遍历数组的数组,php,symfony1,foreach,Php,Symfony1,Foreach,我想要一个具有这种结构的数组: array 'Alabama' => array 0 => array 'id' => string '11' (length=2) 'region_name' => string 'Alabama' (length=7) 'city' => string 'Birmingham' (length=10) 1 =>

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

array
  'Alabama' => 
    array
      0 => 
        array
          'id' => string '11' (length=2)
          'region_name' => string 'Alabama' (length=7)
          'city' => string 'Birmingham' (length=10)
      1 => 
        array
          'id' => string '12' (length=2)
          'region_name' => string 'Alabama' (length=7)
          'city' => string 'Huntsville' (length=10)
      2 => 
        array
          'id' => string '13' (length=2)
          'region_name' => string 'Alabama' (length=7)
          'city' => string 'Mobile' (length=6)
      3 => 
        array
          'id' => string '14' (length=2)
          'region_name' => string 'Alabama' (length=7)
          'city' => string 'Montgomery' (length=10)
  'Alaska' => 
    array
      0 => 
        array
          'id' => string '15' (length=2)
          'region_name' => string 'Alaska' (length=6)
          'city' => string 'Anchorage' (length=9)
并在html中创建无序列表,如下所示:

<ul id="A">
    <li class="state">Alabama</li> 
    <li>Birmingham</li>
    <li>Huntsville</li>
    <li>Mobile</li>
    <li>Montgomery</li>
    <li class="state">Alaska</li>
    <li>Anchorage</li>
</ul> 
<ul id="C">
    <li class="state">California</li>
    <li>Bakersfield</li>
    <li>Fresno</li>
    <li>Los Angeles</li>
</ul>
<ul id="D">
    <li class="state">DC</li>
    <li>Washington</li>
</ul>

此解决方案应能满足您的需求:

$lastLetter = "A";
print( '<ul id="A">' );
foreach( $myArray as $key => $array ){
    if( strtoupper( substr( $key, 0, 1 ) ) != $lastLetter ){
        print( '</ul>' );
        $lastLetter = strtoupper( substr( $key, 0, 1 ) );
        print( '<ul id="' . $lastLetter . '">' );
    }
    print( '<li class="state">' . $key . '</li>' );
    foreach( $array as $subArr ){
        print( '<li>' . $subArr['city'] . '</li>' );
    }
}
print( '</ul>' );
$lastLetter=“A”;
打印(“
    ”); foreach($myArray作为$key=>$array){ if(strtoupper(substr($key,0,1))!=$lastLetter){ 打印(“
”); $lastLetter=strtoupper(substr($key,0,1)); 打印(“
    ”); } 打印(“
  • ”.$key.
  • ”); foreach($subar形式的数组){ 打印(“
  • ”.$subar['city'].
  • ”); } } 打印(“
”);
如果您需要任何特定部分的解释,请让我知道

备选解决方案,如果您的起始字母是可变的(可能是A,也可能不是A)

更改:

$lastLetter = "A";
print( '<ul id="A">' );
$lastLetter=“A”;
打印(“
    ”);
致:

$temp=array\u键($myArray);
$lastLetter=strtoupper(substr($temp[0],0,1));
打印(“
    ”);
此解决方案应能满足您的需求:

$lastLetter = "A";
print( '<ul id="A">' );
foreach( $myArray as $key => $array ){
    if( strtoupper( substr( $key, 0, 1 ) ) != $lastLetter ){
        print( '</ul>' );
        $lastLetter = strtoupper( substr( $key, 0, 1 ) );
        print( '<ul id="' . $lastLetter . '">' );
    }
    print( '<li class="state">' . $key . '</li>' );
    foreach( $array as $subArr ){
        print( '<li>' . $subArr['city'] . '</li>' );
    }
}
print( '</ul>' );
$lastLetter=“A”;
打印(“
    ”); foreach($myArray作为$key=>$array){ if(strtoupper(substr($key,0,1))!=$lastLetter){ 打印(“
”); $lastLetter=strtoupper(substr($key,0,1)); 打印(“
    ”); } 打印(“
  • ”.$key.
  • ”); foreach($subar形式的数组){ 打印(“
  • ”.$subar['city'].
  • ”); } } 打印(“
”);
如果您需要任何特定部分的解释,请让我知道

备选解决方案,如果您的起始字母是可变的(可能是A,也可能不是A)

更改:

$lastLetter = "A";
print( '<ul id="A">' );
$lastLetter=“A”;
打印(“
    ”);
致:

$temp=array\u键($myArray);
$lastLetter=strtoupper(substr($temp[0],0,1));
打印(“
    ”);
这很简单,不需要框架。如果您的数据格式与我在评论中提到的一样

$data = array('Alabama' => array('Birmingham', 'Huntsville', 'Mobile', 'Montgomery'),
              'Alaska' => array('Anchorage'));
ksort($data);
$formatted = array();
foreach($data as $state => $cities) {
    $formatted[$state{0}][$state] = $cities;
}

foreach($formatted as $letter => $states) {
    echo '<ul id="'.$letter.'">';
    foreach($states as $state => $cities) {
        sort($cities);
        echo '<li class="state">'.$state.'</li>'
        foreach($cities as $city) {
            echo '<li>'.$city.'</li>';
        }
    }
    echo '</ul>';
}
$data=array('Alabama'=>array('Birmingham','Huntsville','Mobile','Montgomery'),
“阿拉斯加”=>数组(“锚地”);
ksort(数据);
$formatted=array();
foreach($state=>$cities数据){
$formatted[$state{0}][$state]=$cities;
}
foreach($格式为$letter=>$states){
回声“
    ”; foreach($州为$州=>$城市){ 排序(城市); 回显“
  • ”.$state.
  • ” foreach($cities作为$city){ 回音“
  • ”.$city.
  • ”; } } 回声“
”; }
这很简单,不需要框架。如果您的数据格式与我在评论中提到的一样

$data = array('Alabama' => array('Birmingham', 'Huntsville', 'Mobile', 'Montgomery'),
              'Alaska' => array('Anchorage'));
ksort($data);
$formatted = array();
foreach($data as $state => $cities) {
    $formatted[$state{0}][$state] = $cities;
}

foreach($formatted as $letter => $states) {
    echo '<ul id="'.$letter.'">';
    foreach($states as $state => $cities) {
        sort($cities);
        echo '<li class="state">'.$state.'</li>'
        foreach($cities as $city) {
            echo '<li>'.$city.'</li>';
        }
    }
    echo '</ul>';
}
$data=array('Alabama'=>array('Birmingham','Huntsville','Mobile','Montgomery'),
“阿拉斯加”=>数组(“锚地”);
ksort(数据);
$formatted=array();
foreach($state=>$cities数据){
$formatted[$state{0}][$state]=$cities;
}
foreach($格式为$letter=>$states){
回声“
    ”; foreach($州为$州=>$城市){ 排序(城市); 回显“
  • ”.$state.
  • ” foreach($cities作为$city){ 回音“
  • ”.$city.
  • ”; } } 回声“
”; }

那么您想按字母顺序对州和城市进行排序吗?如果数组的格式为:
数组('State 1'=>数组('City 1'、'City 2'、'City 3'),'State 2'=>数组('City 1'、'City 2'、'City 3')
@PhpMyCoder我可以重新格式化数组吗?我已经在我的原始帖子中添加了它的创建方式。。。也许从一开始设置更好的格式会有帮助。如果你删除了另一个bloat,只是将状态作为键,将城市数组作为值,那么使用起来会更容易。你知道,如果这个列表永远不会更改,您可能需要事先创建它,而不是让PHP在每次需要显示时创建列表。因此,您希望按字母顺序对州和城市进行排序?如果数组的格式为:
array('State 1'=>array('City 1','City 2','City 3'),'State 2'=>array('City 1','City 2','City 3'),可能会更容易一些
@PhpMyCoder我可以重新格式化数组吗?我已经在我的原始帖子中添加了它的创建方式。。。也许从一开始设置更好的格式会有帮助。如果你删除了另一个bloat,只是将状态作为键,将城市数组作为值,那么使用起来会更容易。你知道,如果这个列表永远不会更改,您可能应该事先创建它,而不是让PHP在每次需要显示时创建列表。这假设有一个以A开头的元素。如果没有呢?此解决方案基于问题的上下文。原始问题提供了基于州和地区的输入,其中的假设是,至少有一个州总是以字母A开头。我将编辑我的解决方案,以包括一个不正确的情况。尽管我认为假设总是会有一个以字母A开头的美国州是相当安全的。除非我们有另一场内战,阿拉巴马州成功。不过我们还有阿拉斯加和亚利桑那州!我还以为这是一个安全的赌注,但你永远不知道!我在这个解决方案中添加了第一个字母的支票。很好用!这正是我真正需要的——我讨厌人们一直“做我的家庭作业”,但我对从数组输出数据不是很有经验。看到这个解决方案,我学到了很多东西。谢谢这假设有一个以A开头的元素。如果没有呢?此解决方案基于问题的上下文。原始问题提供了基于州和地区的输入,其中假设至少有一个州始终以字母A开头。我将编辑我的解决方案,以包括以下情况: