簡體   English   中英

PHP-搜索多維數組

[英]PHP - Searching in multidimensional array

我很痛苦,請指教。 我有以下情況:

  • 我有下一個多維數組:

     $numbers = array ( "one_digit" => array (1,2,3,4,5), "two_digits" => array (20,21,22,23,24,25), "three_digits" => array (301,302,303,304,304), "mixed_digits" => array (9,29,309,1) ); 
  • 我需要一種在$ numbers數組中搜索以下內容的方法:

    -搜索數字20是否在任何$ numbers數組中,並在找到的地方回顯。 $ find1 = m_array_search(“ 20”,$ numbers); echo“我在$ numbers的”。$ find1。“子數組中找到了搜索到的值”; 結果:“我在$ numbers的two_digits子數組中找到了搜索到的值”

    -搜索數字1是否在任何$ numbers數組中,並在找到它的地方回顯。 $ find2 = m_array_search(“ 1”,$ numbers); echo“我在$ numbers的”。$ find2。“子數組中找到了搜索到的值”; 結果:“我在$ numbers的two_digits,mixed_digits個子數組中找到了搜索到的值”

因此,功能必須能夠發現一個或多個“子陣列”中的存在。 抱歉,如果我錯過了術語“子數組”

謝謝!!!

使用in_array函數的簡單解決方案:

$search = 1;
$keys = [];
foreach ($numbers as $k => $v) {
    if (is_array($v) && in_array($search, $v)) $keys[] = $k;
}

echo "I've found the searched value in ". implode(', ', $keys) ." subarray". ((count($keys) > 1)? "s":"") ." of \$numbers";

輸出:

I've found the searched value in one_digit, mixed_digits subarrays of $numbers

檢查一下,讓我知道是否對您有幫助。

<?php
function array_find_deep($array, $search, $keys = array())
{
    foreach($array as $key => $value) {
        if (is_array($value)) {
            $sub = array_find_deep($value, $search, array_merge($keys, array($key)));
            if (count($sub)) {
                return $sub;
            }
        } elseif ($value === $search) {
            return array_merge($keys, array($key));
        }
    }

    return array();
}


$numbers = array (
    "one_digit" => array (1,2,3,4,5), 
    "two_digits" => array (20,21,22,23,24,25),
    "three_digits" => array (301,302,303,304,304),
    "mixed_digits" => array (9,29,309,1)
);

var_dump(array_find_deep($numbers, 20));

var_dump(array_find_deep($numbers, 1));

var_dump(array_find_deep($numbers, 301));

var_dump(array_find_deep($numbers, 309));

?>

您可以將結果存儲在變量中,例如$result = array_find_deep($numbers, 20); 並嘗試echo $result[0] ,它將給出在哪個數組中找到該值的結果。

您可以使用array_search()循環嘗試-

$numbers = array (
    "one_digit" => array (1,2,3,4,5),
    "two_digits" => array (20,21,22,23,24,25),
    "three_digits" => array (301,302,303,304,304),
    "mixed_digits" => array (9,29,309,1)
);

function search_value($array, $value)
{
  $result = array();
  foreach($array as $key => $sub) {
    // check if element present in sub array
    if(array_search($value, $sub) !== false) {
      // store the key
      $result[] = $key;
    }
  }
  return $result;
}

var_dump(search_value($numbers, 1));
var_dump(search_value($numbers, 5));

產量

array(2) {
  [0]=>
  string(9) "one_digit"
  [1]=>
  string(12) "mixed_digits"
}
array(1) {
  [0]=>
  string(9) "one_digit"
}

暫無
暫無

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

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