2016-11-09 131 views
2

我在很多腦部疼痛,請指教。我有以下情況:PHP - 在多維數組中搜索

  • 我有下一個多維數組:

    $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) 
    ); 
    
  • 我需要的方式$數字數組中搜索以下:

    - 搜索如果數字20在任何$數組數組中,並且回顯它在哪裏發現 前。 $ find1 = m_array_search(「20」,$ numbers);回聲「我已經找到搜索值」。$ find1。「子數組$」「; 結果:「我發現two_digits的$子陣搜索值號」

    - 搜索時,如果1號在任何$數字陣列和回聲在那裏發現 前。 $ find2 = m_array_search(「1」,$ numbers);回聲「我已經找到了搜索值」。$ find2。「子數組$」「; 結果:「我發現在two_digits搜索的價值,mixed_digits的$子陣數字」

因此功能必須能夠發現在一個或多個「子陣」的存在。對不起,如果我錯過了「子陣列」一詞

謝謝!

回答

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" 
} 
1

檢查此並讓我知道它是否對您有幫助。

<?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],這將給其結果是該陣列發現它的價值。

2
使用 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 
+0

@BogdanWebb這是頁面上的最佳答案(你可以省略'is_array()'檢查;我會)。 ''array_search()'當你只想從每個子數組檢查中得到一個真/假的結果時,它是過量的。你可能想重新考慮。 – mickmackusa