在数组中搜索,如选择?

时间:2017-02-05 13:17:43

标签: php arrays multidimensional-array php-7

我与国家/地区的阵列是:

$cars = array(
    ['brand' => 'bmw', 'place_1' => 'Munich', 'place_2' => 'Cologne'],
    ['brand' => 'vw', 'place_1' => 'Berlin', 'place_2' => 'Kopenhagen'],
    ['brand' => 'hyndai', 'place_1' => 'Miami', 'place_2' => 'Newyork'],
);

我可以使用此命令选择名称:$ cars [1] [' place_2'] nr。 1是阵列中的位置,但我需要"品牌"因为这些值是动态的。

我需要这样的内容:$cars['brand' => 'bmw']['place_2']$cars->brand['bmw']['place2'],但语法不正确。

如何通过代码获取名称,例如来自品牌 bmw的 place2 ,我认为我的数组是正确的,我只需要真正的选择?

我之前的消息来源是:

PHP - find entry by object property from a array of objects

How to search in array of std object (array of object) using in_array php function?

Reference PHP array by multiple indexes

这些示例中的一些有效,但没有人像选择那样,是否可以在数组中使用?

3 个答案:

答案 0 :(得分:0)

将您的品牌用作数组键,而不是使用数字数组索引。

像这样的东西

$cars = [
  'bmw' => ['place_1' => 'Munich', 'place_2' => 'Cologne'],
  'vw' => ['brand' => 'vw', 'place_1' => 'Berlin', 'place_2' => 'Kopenhagen'],
  'hyndai' => ['brand' => 'hyndai', 'place_1' => 'Miami', 'place_2' => 'Newyork'],
];

然后您可以按照以下方式访问变量:$cars['bmw']['place_1']

P.S:“hyndai”可能是一个错字 - 它拼写现代

答案 1 :(得分:0)

未经过测试,但有类似的内容

   function arraySelect($arr,$brand){
        $selection=[];
        foreach($arr as $a){
                if($a["brand"]=$brand{
                        array_push($selection,$a);
                }
        }
        return $selection;
}

答案 2 :(得分:0)

如果您没有机会像@Daniel建议的那样重建阵列,那么您必须迭代它,如下所示:

$brand_to_find = 'bmw';
$key_to_select = 'place_2';

foreach ($cars as $car) {
    if ($car['brand'] == $brand_to_find) {
        echo $car[$key_to_select];

        // if you're sure that will be no
        // more `bmw` in your array - break
        break;
    }
}

全部包含在一个函数中:

function findPlaceByBrand($cars, $brand_to_find, $key_to_select) 
{
    $result = '';

    foreach ($cars as $car) {
        if ($car['brand'] == $brand_to_find) {
            $result = $car[$key_to_select];

            // if you're sure that will be no
            // more `bmw` in your array - break
            break;
        }
    }

    return $result;
}

echo findPlaceByBrand($cars, 'bmw', 'place_2');   // Cologne
echo findPlaceByBrand($cars, 'vw', 'place_1');    // Berlin
echo findPlaceByBrand($cars, 'honda', 'place_1'); // empty string