搜索返回多个结果的多维数组

时间:2016-08-04 09:34:22

标签: php arrays multidimensional-array php-5.5

我正在尝试搜索多维数组,但搜索只返回第一次出现。

我有一个多维数组$planned_housek

Array
(
    [0] => Array
        (
            [id] => 14
            [title] => Titel 10
            [ruletext] => Regel 10
            [room] => 101
            [roomid] => 43
        )

    [1] => Array
        (
            [id] => 14
            [title] => Titel 10
            [ruletext] => Regel 10
            [room] => 102
            [roomid] => 42
        )

    [2] => Array
        (
            [id] => 14
            [title] => Titel 10
            [ruletext] => Regel 10
            [room] => 103
            [roomid] => 41
        )

    [3] => Array
        (
            [id] => 14
            [title] => Titel 10
            [ruletext] => Regel 10
            [room] => 104
            [roomid] => 44
        )

    [4] => Array
        (
            [id] => 14
            [title] => Titel 10
            [ruletext] => Regel 10
            [room] => 105
            [roomid] => 45
        )

    [5] => Array
        (
            [id] => 7
            [title] => TItel 3
            [ruletext] => Regel 3
            [room] => 101
            [roomid] => 43
        )

    [6] => Array
        (
            [id] => 13
            [title] => Titel 9
            [ruletext] => Regel 9
            [room] => 101
            [roomid] => 43
        )
)

当我用以下方式搜索时:

$planned_tasks = array_search($bkng_room, array_column($planned_housek, 'roomid'));

它返回$bkng_room的第一次出现。

我是否必须使用for/foreach来获取一系列匹配项?还是有更优雅的解决方案(PHP 5.5)?

我发现了这个问题,但答案似乎并不是最优雅的解决方案: How to search a multidimensional array to return multiple keys。 这也不是:Search multidimensional array for value and return new array

array_search上的文档中,我发现:

  

如果在干草堆中多次找到针头,则第一个匹配的密钥   退回。要返回所有匹配值的键,请使用   array_keys()改为使用可选的search_value参数。

但我不确定如何在我的代码中实现这一点。

1 个答案:

答案 0 :(得分:1)

希望,这个功能是你想要的!!

function array_search_inner ($array, $attr, $val, $strict = FALSE) {
  if (!is_array($array))
      return FALSE;
   foreach ($array as $key => $inner) {
      if (!is_array($inner))
           return FALSE;
      if (!isset($inner[$attr])) 
           continue;
      if ($strict) {
      if ($inner[$attr] === $val) 
           return $key;
    } else {
      if ($inner[$attr] == $val) return $key;
    }
  }
  return NULL;
}

// Example usage
$key = array_search_inner($array, 'id', 6);
print_r($key);