我有一个像这样的对象数组:
`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,但我总是得到一个假布尔值。我有点卡住了。
答案 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;
}
}