我将这个JSON数据设置为如下所示的对象数组,其中键的字面意思是“ key”,值的字面意思是“ value”:
$fruit = [{"key": "a", "value": "apple"},
{"key": "b", "value": "banana"},
{"key": "c", "value": "cherry"}];
我正在尝试编写一个PHP函数,该函数将这个数组作为参数以及要查找的键。
该函数应充当查找,以便该函数将返回与提供的键关联的值。例如:
function lookup($array, $key){
// look through the list of objects and
// return value that is associated with this key
}
函数调用示例:
lookup($fruit, "c");
预期输出:
"cherry"
我是PHP的新手,所以我不知道PHP是否具有可以简化此工作的最佳实践或本机功能,还是我应该遍历$ fruit数组并首先使用它构建新的PHP数组?最好的方法是什么?
答案 0 :(得分:3)
使用PHP 7.0+,您可以在对象数组上使用array_column
。
提供第二个参数作为从中检索值的属性名称,然后使用第三个参数指定要作为索引依据的属性名称,将为您提供由指定键索引的值的完整列表。
$values = array_column($json, 'value', 'key');
var_dump($values);
/*
array(3) {
["a"]=>
string(5) "apple"
["b"]=>
string(6) "banana"
["c"]=>
string(6) "cherry"
}
*/
var_dump($values['c']);
/*
string(6) "cherry"
*/
/**
* @param array|object[] $json
* @param string $key
* @param mixed $default
* @param string $column
* @param string $index
* @return string
*/
function lookup($json, $key, $default = '', $column = 'value', $index = 'key') {
return array_column($json, $column, $index)[$key] ?? $default;
}
var_dump(lookup($json, 'c'));
结果:
string(6) "cherry"
请注意,如果您希望有一个值,它将返回一个值 具有相同
key
属性值的1个以上的结果,这种方法 不会产生预期的结果。如果是这样,请告诉我,我将更新我的答案。
答案 1 :(得分:1)
将JSON字符串转换为PHP数组
$fruit = json_decode($fruit, true);
lookup($fruit, 'key');
然后,您只需要遍历函数中的数组即可。
function lookup($array, $key) {
//loop through all values in array
foreach($array as $values) {
//if 'key' value matches `$key`, return 'value' value.
if($values['key'] == $key) {
return $values['value'];
}
}
//if nothing has been returned, return empty string
return "";
}
现在,如果您可以控制创建$fruit
值,则最好采用以下模式创建它:
$fruit = [
"a" => "apple",
"b" => "banana",
"c" => "cherry",
];
然后您可以使用:
$fruit[$key];
答案 2 :(得分:0)
类似的事情会起作用。
<?php
$fruit = json_decode($sourceOfJson, true);
function lookup($array, $key){
// Find the index of the entry where "key" = $key
$index = array_search($key, array_column($array, 'key'));
// Handle the entry not being found however you want to.
if(!$index){
return null;
// throw new Exception("Couldn't find index from value $key");
// Log::error("Couldn't find index from value $key");
// return 'SomeDefaultValue';
}
return $array[$index]['value'];
}
echo lookup($fruit, 'c');