使用PHP

时间:2018-01-09 15:19:35

标签: php arrays

我有这个数组:

$datas = array(
    array(
        'id' => '1',
        'country' => 'Canada',
        'cities' => array(
            array(
                'city'  => 'Montreal',
                'lang'   => 'french'
            ),
            array(
                'city'  => 'Ottawa',
                'lang'   => 'english'
            )
        )
    )
);

问题1:

当我拥有country时,如何获取id名称? 我试过了:$datas['id'][1] => 'country'

问题2:

当我拥有cities时,如何循环id? 我试过了:

foreach ($datas as $data => $info) {
    foreach ($info['cities'] as $item) {
        echo '<li>'.$item['city'].'</li>';
    }
}

非常感谢。

2 个答案:

答案 0 :(得分:2)

您拥有要分析的数组的ID,但您的数组结构为地图,这意味着外部数组中没有键。因此,您必须首先迭代数组以找到您要查找的对象。

虽然第一种方法是搜索具有您要查找的ID的对象,但我建议您使用其ID映射阵列。为此,您可以使用两个PHP数组函数:array_columnarray_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']或任何你需要的东西。