2016-11-09 4 views
2

Ich bin in einer Menge Gehirnschmerzen, bitte beraten. Ich habe die folgende Situation:PHP - Suche in mehrdimensionalen Array

  • Ich habe das nächste mehrdimensionales 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) 
    ); 
    
  • Ich brauche eine Art und Weise in der $ Zahlen Array für die folgenden suchen:

    - Suche wenn die Nummer 20 in einem beliebigen $ numbers-Array ist und das Echo, wo es gefunden wird, ex. $ find1 = m_array_search ("20", $ Zahlen); echo "Ich habe den gesuchten Wert in". $ find1. "subarray von $ numbers" gefunden; Ergebnis: - 1 ist in jedem $ Zahlen Array suchen, wenn Anzahl und Echo, wo es ex gefunden

    „Ich habe den gesuchten Wert in two_digits Subarray von $ Zahlen gefunden“. $ find2 = m_array_search ("1", $ Zahlen); echo "Ich habe den gesuchten Wert in" gefunden. $ find2. "Unterfeld von $ numbers"; Ergebnis: „Ich habe den gesuchten Wert in two_digits gefunden, mixed_digits Subarray von $ Zahlen“

somit Funktion muss in der Lage sein Vorhandensein in einem oder mehreren „Sub-Arrays“ zu erkennen. Entschuldigung, wenn ich den Begriff "Subarray" vermisst habe

DANKE !!!

Antwort

0

Sie können versuchen, diese mit array_search() in einer Schleife -

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

Ausgang

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

Überprüfen Sie dies und lassen Sie mich wissen, wenn es Ihnen hilft.

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

?> 

können Sie speichern das Ergebnis in einer Variablen wie $result = array_find_deep($numbers, 20); und versuchen echo $result[0], die das Ergebnis geben wird, in dem Array den Wert gefunden.

2

Einfache Lösung mit in_array Funktion:

$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"; 

Der Ausgang:

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

@BogdanWebb Dies ist die beste Antwort auf der Seite (Sie können die 'is_array()' Prüfung weglassen; Ich würde). 'array_search()' ist Overkill, wenn Sie bei jeder Subarray-Prüfung nur ein wahres/falsches Ergebnis erhalten möchten. Vielleicht möchten Sie es noch einmal überdenken. – mickmackusa

Verwandte Themen