经过几个小时的弄乱,出汗和拉扯我的头发后,我仍然无法获得这些价值观。我想循环遍历第一级数组,这很简单,基本的'foreach'循环,但我似乎无法到达第二个子数组上的'['suitability']'数组。我环顾四周,但除了真正基本的数组教程之外似乎无法得到任何东西,这些教程似乎并没有深入研究循环。
我正在尝试访问嵌套/子数组中的值,即'['Species_name']'。
我不想使用关联键,因为排序有点问题。
Array
(
[0] => Array
(
[id] => 1
[name] => Bradeley Hall Pool
[postcode] => CW1 5QN
[lat] => 53.10213
[lon] => -2.41069
[size] => 1.60
[pegs] => 21
[distance] => 26.6
)
[1] => Array
(
[id] => 2
[name] => Farm Pool
[postcode] => CW9 6JQ
[lat] => 53.320502
[lon] => -2.549049
[size] => 0.88
[pegs] => 8
[distance] => 15.4
[suitability] => Array
(
[0] => Array
(
[fk_water_id] => 2
[fk_species_id] => 4
[species_name] => Barbel
[species_rating] => 1
[record_id] => 1
[weight_kg] => 2.721554
[length_cm] => 40
[height_cm] => 30
)
)
)
)
答案 0 :(得分:19)
可能绊倒你的是适应性是一个数组的数组,而不仅仅是一个数组,所以在一个例子中,你想获得第一个第二个顶级元素的species_name属性,你会使用像
$array[1]["suitability"][0]["species_name"];
值得注意的是,您的第一个数组不包含“适用性”值,因此无法访问。在foreach循环中,您可以使用类似于此的构造:
foreach($array as $value){
if (isset($value["suitability"])){
echo $value["suitability"][0]["species_name"];
}
}
答案 1 :(得分:1)
您可以查看PHP: RecursiveArrayIterator class
这允许您迭代多个嵌套的ArrayIterator。如果您没有使用任何ArrayIterator,那么您应该考虑尝试它们。
答案 2 :(得分:1)
Iracicot的回答帮助我找到了使用RecursiveIterator类访问递归数组值的方法,如下所示。根据{{3}},我的解决方案最终使用了更有用的RecursiveIteratorIterator类。请记住一个非常有用的事实,即最终产品是扁平阵列,我个人发现它更容易使用。
<table style="border:2px;">
<tr>
<th>Time</th>
<th>Service Number</th>
<th>Destination</th>
</tr>
<?php
foreach($stops as $buses){
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($buses));
$bus = (iterator_to_array($iterator,true));
print('<tr><td>'.$bus['AimedDepartureTime'].'</td><td>'.$bus['PublishedLineName'].'</td><td>'.$bus['DirectionName'].'</td></tr>');
}
?>
</table>
答案 3 :(得分:0)
要从多维数组获取嵌套元素值并回退到默认值,可以使用:
Arr::getNestedElement($array, $keys, $default = null)
来自this library的像这样:
Arr::getNestedElement($array, [$index1, 'suitability', $index2, 'species_name'])
如果尝试访问数组中不存在的键,它将返回null(或指定的默认值)而不是警告。