2017-04-24 4 views
-1

Hallo, ich arbeite an einigen Operationen, wo ich Wert von Array von seinem Schlüssel erhalten muss.Wie bekomme ich den Wert des Arrays basierend auf dem Matching auf Schlüssel

Ich habe $attr_color Variable mit dem Wert red. Wenn red im Array ist, muss es seinen Wert zurückgeben.

Unten ist mein Array:

Array 
(
    [0] => Array 
     (
      [label] => 
      [value] => 
     ) 

    [1] => Array 
     (
      [label] => red 
      [value] => 32 
     ) 

    [2] => Array 
     (
      [label] => green 
      [value] => 33 
     ) 

    [3] => Array 
     (
      [label] => pink 
      [value] => 34 
     ) 

    [4] => Array 
     (
      [label] => black 
      [value] => 35 
     ) 

    [5] => Array 
     (
      [label] => white 
      [value] => 36 
     ) 

) 

Ich habe unten Code versucht, aber es gibt leer:

$attr_color = "red"; 

//$response is my array which i have mention above. 
if(in_array($attr_color,array_column($response,"label"))) 
{ 

    $value = $response['value']; 
    echo "Value".$value; 
    exit; 
} 

Hilfe? Wo habe ich Fehler gemacht?

+0

Sie kann nicht direkt auf $ response ['value'] zugreifen. Das ist, was Sie falsch machen –

+0

Sie müssen den Index des Arrays mit 'Label = rot ', dann verwenden Sie $ $ response [$ index] [' Wert ']' –

Antwort

2

Verwenden array_search, und prüfen, ob falsche:

$index = array_search($attr_color, array_column($response,"label")); 
if ($index !== false) { 
    echo $response[$index]['value']; 
} 
+0

Gleiche Antwort von mir gegeben und ein Downvote dafür –

+0

Praktisch implementiert dies und das ist eigentlich machbare Lösung für mich Dank –

0

Verwenden array_search statt in_array

$attr_color = "red"; 

if(($index = array_search($attr_color,array_column($response,"label")))!==FALSE) 
{ 

    $value = $response[$index]['value']; 
    echo "Value".$value; 
    exit; 
} 
+0

Dies wird die Farbe nicht finden, wenn es in der auftritt Das erste Element des Arrays – trincot

+0

'array_search' gibt den Index der Übereinstimmung zurück, wenn es keine entsprechende Farbe im Array gibt, wird false zurückgegeben. Ich suche hier das Array von Labels, nicht das ursprüngliche Array. Dies ist die kürzeste Lösung, anstatt eine foreach-Schleife zu verwenden. Aber ich respektiere alle deine Antworten. –

+0

Haben Sie versucht, was ich in meinem ersten Kommentar angegeben habe? Hast du die Ausgabe bekommen? – trincot

0

Versuchen:

$attr_color = "red"; 

//$response is my array which i have mention above. 

$index = array_search($attr_color, array_column($response, 'label')); 

if($index!==false){ 
    $value = $response[$index]['value']; 
    echo "Value:".$value; 
    exit; 
} 

Hier $ Index wird der Index des Arrays mit dem Label rot

+0

Aktualisiert, bitte überprüfen Sie diesen Code –

+0

Warum 'downvote'? –

+0

Dies wird die Farbe nicht finden, wenn es im allerersten Element des Arrays auftritt – trincot

2

Versuchen Sie diese einfache Lösung zu erhalten, hoffen, dass dies dir helfen. Hier verwenden wir array_column für Spalten bekommen und Indizierung mit keys und values, Wo keys sind labels und values als value

Try this code snippet (mit Probe-Eingänge)

$result=array_column($array, 'value',"label"); 
$result=array_filter($result); 
echo $result["red"]; 
2

In Ihrem Fall es reicht eine regelmäßige zu verwenden foreach loop:

$attr_color = "red"; 
$value = ""; 

foreach ($response as $item) { 
    if ($item['label'] == $attr_color) { 
     $value = $item['value']; 
     break; // avoids redundant iterations 
    } 
} 
1

von array_column mit dritten Parameter und array_search als

mit
$attr_color="red"; 
$arr = array_filter(array_column($response, "label", 'value'));// pass thired parameter to make its key 
    if (array_search($attr_color, $arr)) {// use array search here 

     echo array_search($attr_color, $arr); 
    } 
+0

@ Saty, wer macht Abstimmungen? –

+0

@trincot PLZ überprüfen https://3v4l.org/WX5ZZ – Saty

+1

In der Tat funktioniert diese Lösung. – trincot

1

unten Code Versuchen: Array Match-Funktion:

$your_value = array_search($attr_color, array_column($response,"label")); 
if ($index !== false) { 
    echo $response[$your_value]['value']; 
} 
Verwandte Themen