如何在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开头。我将编辑我的解决方案,以包括以下情况: