【问题标题】:PHP Search multidimensional array for value & get corresponding element valuePHP在多维数组中搜索值并获取对应的元素值
【发布时间】:2017-04-02 20:35:28
【问题描述】:

我正在使用 PHP 并且我有一个多维数组,我需要搜索它以查看“键”的值是否存在,如果存在则获取“字段”的值。这是我的数组:

Array
(
    [0] => Array
    (
        [key] => 31
        [field] => CONSTRUCTN
        [value] => LFD_CONSTRUCTION_2
    )
    [1] => Array
    (
        [key] => 32
        [field] => COOLING
        value] => LFD_COOLING_1
    )
)

我希望能够在数组中搜索“key”值 31。如果存在,那么我希望能够提取“CONSTRUCTN”对应的“field”值。

我尝试过使用 array_search(31, $myArray) 但它不起作用...

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:
    function searchMultiArray($val, $array) {
      foreach ($array as $element) {
        if ($element['key'] == $val) {
          return $element['field'];
        }
      }
      return null;
    }
    

    然后:

    searchMultiArray(31, $myArray);
    

    应该返回“CONSTRUCTN”。

    【讨论】:

      【解决方案2】:

      单线使用array_columnarray_search函数的解决方案:

      $result = array_search(31, array_column($arr, 'key', 'field'));
      
      print_r($result);   // CONSTRUCTN
      

      或者用简单的foreach循环:

      $search_key = 31;
      $result = "";
      foreach ($arr as $item) {   // $arr is your initial array
          if ($item['key'] == $search_key) {
              $result = $item['field'];
              break;
          }
      }
      
      print_r($result);   // CONSTRUCTN
      

      【讨论】:

        【解决方案3】:

        你可以使用array_filter,像这样,

        function searchMultiDimensionalArray($array, $key, $value) {
           $items = array_filter($array, function($item){
             return $item[$key] == $value;
          });
          if (count($items) > 0) {
            return $items[0];
          }
          return NULL;
        }
        

        然后像这样对任何多维数组使用它,

        $searchItem = searchMultiDimensionalArray($myArray, 'key', 31)
        
        if ($searchItem != NULL) {
           $field = $searchItem['field']
        }
        

        【讨论】:

          【解决方案4】:

          我没有测试过,但我认为应该这样做。

          function searchByKey($value, $Array){
              foreach ($Array as $innerArray) {
                  if ($innerArray['key'] == $value) {
                      return $innerArray['field'];
                  }
              }
          }
          

          然后调用searchByKey(31, $myArray); 应该返回'CONSTRUCTN'。

          【讨论】:

          • 而且.....看起来我应该在发布之前刷新页面! @gmc 已经发布了几乎完全相同的功能。
          猜你喜欢
          • 1970-01-01
          • 2012-12-08
          • 1970-01-01
          • 2012-03-05
          • 1970-01-01
          • 2011-05-20
          • 2017-07-23
          • 2012-05-10
          • 1970-01-01
          相关资源
          最近更新 更多