2017-06-22 5 views
1

Wie kann ich einen Schlüssel in einem Array erhalten, nur weil ich weiß, dass er Wert ist? Zum Beispiel, hier ist ein Array:Erhalte den Schlüssel aus dem Array über den Wert

$array = Array("Item1" => array("Number" => "One", "Letter" => "A")); 

Nur durch „One“ oder „A“ zu wissen, wie kann ich den Hauptschlüssel Namen bekommen, Item1?

Ich habe in array_key_value und in_array untersucht, aber ich denke nicht, dass diese Funktionen für meine Art von Array hilfreich sind.

+0

mit einem 'foreach' –

Antwort

1

Da es sich um ein 2D-Array handelt, sollten Sie das innere Array nach dem Wert durchsuchen, so dass Sie hierfür eine eigene Funktion erstellen müssten. Etwas wie folgt aus:

function findInArray($array, $lookup){ 
    //loop over the outer array getting each key and value. 
    foreach($array as $key=>$value){ 
     //if we found our lookup value in the inner array 
     if(in_array($lookup, $value)){ 
      //return the original key 
      return $key; 
     } 
    } 
    //else, return null because not found 
    return null; 
} 

$array = Array("Item1" => array("Number" => "One", "Letter" => "A")); 

var_dump(findInArray($array, 'One')); //outputs string(5) "Item1" 
var_dump(findInArray($array, 'Two')); //outputs null 

Demo: https://3v4l.org/oRjHK

0

Diese Funktion können Sie

function key_of_value($array, $value){ 
    foreach($array as $key=>$val){ 
     if(in_array($value, $val)){ 
      return $key; 
     } 
    } 
    return null; 
} 

echo key_of_value(['Item1'=>['One','Two','Three','Hello',2,6]],'A'); 
0

helfen Es gibt keinen Weg, um durch Ihre Daten laufen. Dies könnte ein wenig eleganter als zwei foreach Schleifen sein:

<?php 
$match = null; 
$needle = 'Two'; 
$haystack = [ 
    'Item1' => [ 
     'Number' => 'One', 
     'Letter' => 'A' 
    ], 
    'Item2' => [ 
     'Number' => 'Two', 
     'Letter' => 'B' 
    ], 
    'Item3' => [ 
     'Number' => 'Three', 
     'Letter' => 'C' 
    ], 
]; 

array_walk($haystack, function($entry, $key) use ($needle, &$match) { 
    if(in_array($needle, $entry)) { 
     $match = $key; 
    } 
}); 
var_dump($match); 

Der Ausgang offensichtlich ist:

string(5) "Item2" 
0

Sie können array_walk_recursive verwenden iterieren auf Array rekursiv Werte. Ich schreibe eine Funktion, die Hauptschlüssel des gesuchten Wertes in verschachtelten Arrays zurückgibt.

<?php 

$array = array("Item1" => array("Number" => "One", "Letter" => "A", 'other' => array('Number' => "Two"))); 

echo find_main_key($array, 'One'); //Output: "Item1" 
echo find_main_key($array, 'A'); //Output: "Item1" 
echo find_main_key($array, 'Two'); //Output: "Item1" 
var_dump(find_main_key($array, 'nothing')); // NULL 

function find_main_key($array, $value) { 
    $finded_key = NULL; 
    foreach($array as $this_main_key => $array_item) { 
     if(!$finded_key) { 
      array_walk_recursive($array_item, function($inner_item, $inner_key) use ($value, $this_main_key, &$finded_key){ 
       if($inner_item === $value) { 
        $finded_key = $this_main_key; 
        return; 
       } 
      }); 
     } 
    } 
    return $finded_key; 
} 
0

Dies ist, wie ich es tun würde:

foreach($array as $key => $value) { if(in_array('One', $value)) echo $key; }

Verwandte Themen