簡體   English   中英

如何在PHP中循環遍歷數組數組

[英]How to loop through arrays of arrays in PHP

我想采用這種結構的數組:

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>

這個想法是按字母順序排列和分組的無序列表,我可以使用javascript輕松顯示和隱藏它們。 這部分很容易...這部分,我迷路了。

我已經嘗試過一種嵌套的foreach循環,但是我使用的框架由於OutputEscaper錯誤而拒絕這樣做,我認為這是有道理的-我真的不確定如何正確執行此操作。

我將不勝感激!

編輯:這是數組的初始格式化方式:

$this->cityGroups = array();
foreach($this->USCities as $city)
{
  $this->cityGroups[$city['region_name']][] = $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>';
}

該解決方案應該可以實現您想要的目標:

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

如果您需要任何特定部分的解釋,請告訴我。

備用解決方案,如果您的起始字母是可變的(可能是或不是A)

更改:

$lastLetter = "A";
print( '<ul id="A">' );

至:

$temp = array_keys( $myArray );
$lastLetter = strtoupper( substr( $temp[0], 0, 1 ) );
print( '<ul id="' . $lastLetter . '">' );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM