我有这个数组:
$datas = array(
array(
'id' => '1',
'country' => 'Canada',
'cities' => array(
array(
'city' => 'Montreal',
'lang' => 'french'
),
array(
'city' => 'Ottawa',
'lang' => 'english'
)
)
)
);
当我拥有country
时,如何获取id
名称?
我试过了:$datas['id'][1] => 'country'
当我拥有cities
时,如何循环id
?
我试过了:
foreach ($datas as $data => $info) {
foreach ($info['cities'] as $item) {
echo '<li>'.$item['city'].'</li>';
}
}
非常感谢。
答案 0 :(得分:2)
您拥有要分析的数组的ID,但您的数组结构为地图,这意味着外部数组中没有键。因此,您必须首先迭代数组以找到您要查找的对象。
虽然第一种方法是搜索具有您要查找的ID的对象,但我建议您使用其ID映射阵列。为此,您可以使用两个PHP数组函数:array_column
和array_combine
。
array_column
可以提取数组中每个元素的特定字段。由于您有多个国家/地区对象,我们希望从中提取ID以便以后将其用作密钥。
array_combine
采用两个大小相同的数组来创建一个新的关联数组。然后将第一个数组的值用作键,而第二个数组的值将用作值。
$mappedCountries = array_combine(array_column($datas, 'id'), $datas);
假设密钥1
存储在变量$key = 1;
中,您可以使用$mappedCountries[$key]['country']
获取国家/地区的名称,然后使用$mappedCountries[$key]['cities']
来获取城市,然后你就可以迭代了。
答案 1 :(得分:1)
如果$datas
中可能有多个数组,并且您希望通过id(或其他键)找到一个数组,则可以执行以下操作:
function search($datas, $key, $value) {
foreach($datas as $data) {
if ($data[$key] === $value) {
return $data;
}
}
所以如果你想找到id = 1的地方
$result = search($datas, 'id', '1');
然后你可以获得国家echo $result['country']
或任何你需要的东西。