2016-05-09 9 views
0

Ich habe ein Array wie die folgend in PHP erhalten:Php Array von Arrays id von Namen

$my_array = array(); 
$my_array[] = array("id"=>"myid1", "name"=>"myname1"); 
$my_array[] = array("id"=>"otherid", "name"=>"othername"); 
$my_array[] = array("id"=>"morestuffid", "name"=>"morestuffname"); 

Mit einem „Namen“ wie „other“, ist es möglich, den jeweiligen „id“ von $ abrufen my_array ohne eine for-Schleife?

+0

'array_walk()' 'vielleicht array_map()'? – Rasclatt

+0

Möchten Sie die ID nur für den anderen Namen oder für die entsprechenden IDs für alle Namen im Array abrufen? – workthat

+0

Haben Sie Gründe, 'foreach' zu vermeiden? –

Antwort

4

können Sie Ihre Array-Spalte name von array_column Methode erhalten. Dann finden Sie wollen String von array_search sein wird den Index des Arrays zurückgeben.

$index = array_search("othername",array_column($my_array,"name")); 
var_dump($my_array[$index]["id"]); 
+0

Vielen Dank. Viel eleganter als eine For-Schleife. Das habe ich gesucht. Kudos. – kekit

+0

@kekit, ich bezweifle, dass Sie es elegant finden, wenn Sie nach ein paar Monaten Ihren Code anschauen. Dieser Code ist auch ineffizient, da mindestens 2 Schleifen benötigt werden. –

+0

@kekit, auch 'array_column' erzeugt ein extra Array –

0

Bitte verwenden

$id = array_filter( 
     array_map(
      function($array) { 
       if($array['name']== 'othername'){ 
        return $array['id']; 
       } 
      },$my_array 
     ) 
    ); 
print "<pre>";print_r($id);