2016-04-26 134 views
1

我有對象的一個​​這樣的數組:從獲取對象Array具體數據

`array(1) 
{ 
["networks"]=> array(20) 
    { 
    [0]=> object(stdClass)#2 (11) 
    { 
     ["name"]=> string(17) "Ghostlight Coffee" 
     ["id"]=> int(193086) 
     ["is_fcc"]=> bool(true) 
     ["latitude"]=> float(39.750251) 
     ["longitude"]=> float(-84.175353) 
     ["down_repeater"]=> int(0) 
     ["down_gateway"]=> int(0) 
     ["spare_nodes"]=> int(0) 
     ["new_nodes"]=> int(0) 
     ["node_count"]=> int(1) 
     ["latest_firmware_version"]=> string(10) "fw-ng-r589" 
    } 
    [1]=> object(stdClass)#3 (11) 
    { 
     ["name"]=> string(8) "toms new" 
     ["id"]=> int(188149) 
     ["is_fcc"]=> bool(true) 
     ["latitude"]=> float(39.803392) 
     ["longitude"]=> float(-84.210273) 
     ["down_repeater"]=> int(0) 
     ["down_gateway"]=> int(1) 
     ["spare_nodes"]=> int(0) 
     ["new_nodes"]=> int(0) 
     ["node_count"]=> int(1) 
     ["latest_firmware_version"]=> string(10) "fw-ng-r573" 
}' 

的陣列繼續,但是這應該給你的想法。基本上我需要能夠通過「名稱」搜索這個數組,並拉動關聯的「ID」以使用另一個函數。任何想法如何做到這一點?我不想使用循環,因爲這個數組會變成幾百個對象,所以我認爲這會佔用太多時間。我試過array_search,我總是得到一個假布爾值。我有點卡住了。

回答

0

除非你可以通過名字索引數據,否則一個循環是唯一的出路,恐怕。無論如何,這就是所有的array_search都會在幕後做的事情。除非陣列要向數千個方向發展,否則性能可能並不明顯。

$search = 'Ghostlight Coffee'; 

foreach ($array['networks'] as $network) 
{ 
    if ($network->name == $search) 
    { 
     $id = $network->id; 
     break; 
    } 
} 
1

PHP 7可以使用array_column創建具有「名稱」值的數組。然後用array_search可以檢索適當的鍵:

$names = array_column($array['networks'], 'name'); 
$key = array_search('toms new', $names); 

if($key !== False) $id = $array['networks'][$key]->id; 

PHP < 7,變換對象的陣列中的陣列的陣列,那麼可以使用相同的方法與轉換後的數組:

$array2 = json_decode(json_encode($array), True); 
$names = array_column($array2['networks'], 'name'); 
$key = array_search('toms new', $names); 

if($key !== False) $id = $array['networks'][$key]->id;