bootstrap
允许我根据数组值找到第一个数组键。
如果值嵌套在数组值的对象中,或者必须手动执行,如下所示,可以使用单个PHP函数完成吗?
谢谢
<?php
function getKeyBasedOnName($arr,$name)
{
foreach($arr as $key=>$o) {
if($o->name==$name) return $key;
}
return false;
}
$json='[
{
"name": "zero",
"data": [107, 31, 635, 203, 2]
},
{
"name": "one",
"data": [133, 156, 947, 408, 6]
},
{"name": "two",
"data": [1052, 954, 4250, 740, 38]
}
]';
$arr=json_decode($json);
var_dump(getKeyBasedOnName($arr,'zero')); //Return 0
var_dump(getKeyBasedOnName($arr,'one')); //Return 1
var_dump(getKeyBasedOnName($arr,'two')); //Return 2
var_dump(getKeyBasedOnName($arr,'three')); //Return false
答案 0 :(得分:4)
只是为了好玩,如果数组基于0
和顺序键:
echo array_search('zero', array_column(json_decode($json, true), 'name'));
name
键值提取到单个数组这会将JSON解码为数组。如果需要,可以将其解码为对象。从PHP 7开始,您可以使用一组对象:
$arr = json_decode($json);
echo array_search('zero', array_column($arr, 'name'));
答案 1 :(得分:3)
没有单一的内置函数可以进行任意比较。但是,您可以滚动自己的通用数组搜索:
function array_usearch(array $array, callable $comparitor) {
return array_filter(
$array,
function ($element) use ($comparitor) {
if ($comparitor($element)) {
return $element;
}
}
);
}
这样做的好处是可以将比较数组返回到比较函数,而不是您以后必须查找的单个键。它也有性能O(n),这没关系。
示例:
array_usearch($arr, function ($o) { return $o->name != 'zero'; });