【问题标题】:Search in array, like select?在数组中搜索,例如选择?
【发布时间】:2017-02-05 13:17:42
【问题描述】:

我的国家/地区数组是:

$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'] the nr. 1 是数组中的位置,但我需要“品牌”,因为这个值是动态的。

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

我如何通过 brand 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

这个例子有些可行,但没有一个像select,是否可以在数组中?

【问题讨论】:

  • 您可以使用 foreach 循环并编写自定义函数。
  • 正如我已经回答的那样

标签: php arrays multidimensional-array php-7


【解决方案1】:

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

类似的东西

$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" 可能是一个错字 - 它的拼写是 Hyundai

【讨论】:

  • 这是我的第一个想法,但这改变了数据结构 - 所以与原始问题不完全相同
【解决方案2】:

未测试,但类似

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

【讨论】:

    【解决方案3】:

    如果您没有机会按照@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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多