从对象数组中获取特定数据

时间:2016-04-26 14:34:24

标签: php arrays object

我有一个像这样的对象数组:

`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"
}'

阵列继续,但这应该给你的想法。基本上我需要能够通过" Name"来搜索这个数组。并拉动关联" id"用于其他功能。关于如何做到这一点的任何想法?我不想使用循环,因为这个数组将变成几百个对象,所以我认为这将花费太多时间。我尝试过array_search,但我总是得到一个假布尔值。我有点卡住了。

2 个答案:

答案 0 :(得分:1)

PHP 7 上,您可以使用array_column创建一个带有“name”值的数组。然后使用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;

答案 1 :(得分:0)

除非您可以按名称索引数据,否则循环是唯一的方法,我很害怕。无论如何,所有的array_search都将在幕后进行。除非该阵列将向成千上万的方向发展,否则无论如何都不会引人注目。

$search = 'Ghostlight Coffee';

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