[英]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.