簡體   English   中英

搜索返回多個結果的多維數組

[英]Search multi dimensional array returning multiple results

我正在嘗試搜索多維數組,但是搜索僅返回第一次出現的數組。

我有一個多維數組$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)?

我找到了這個問題,但是答案似乎並不是最優雅的解決方案: 如何搜索多維數組以返回多個鍵 這也不是:在多維數組中搜索值並返回新數組

在關於array_search的文檔中,我發現:

如果在干草堆中多次發現needle,則返回第一個匹配鍵。 要返回所有匹配值的鍵,請使用array_keys()和可選的search_value參數。

但是我不確定如何在我的代碼中實現這一點。

希望,此功能是您想要的!

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM