我有以下JSON代码:
[
{"id":16385,"value":"2"},
{"id":4121,"value":"Spiderman"},
{"id":78036,"value":"Batman"},
{"id":8075,"value":["I accept the terms"]}
]
下面的数组
不使用JSON_Decode
:
Array (
[0] => stdClass Object ( [id] => 16385 [value] => 2 )
[1] => stdClass Object ( [id] => 4121 [value] => Spiderman )
[2] => stdClass Object ( [id] => 78036 [value] => Batman )
[3] => stdClass Object ( [id] => 8075 [value] => Array ( [0] => I accept the terms ) )
)
我想使用array_search
https://www.php.net/manual/en/function.array-search.php
所以我写了这个:
$key = array_search('4121', $array);
我希望$key
为1
,但如果我执行echo$key
,则为空
下面是我的完整代码:
function personen_tonen() {
ob_start();
global $wpdb;
//SQL query
$sql = "SELECT JSON_EXTRACT(custom_fields, '$') AS 'Test' FROM `wp_bookly_customer_appointments`";
$personen = $wpdb->get_results($sql);
foreach($personen as $persoon) {
$array = $persoon->Test;
$data = json_decode($array);
print_r($data);
$key = array_search('4121', $data);
echo $key;
}
return ob_get_clean();
}
add_shortcode('personen', 'personen_tonen');
如果。。。想要使用array_search()
函数,则需要使用json_decode()
和true
作为第二个参数来解码JSON字符串并将JSON内容转换为关联数组:
<?php
$json = '[
{"id":16385,"value":"2"},
{"id":4121,"value":"Spiderman"},
{"id":78036,"value":"Batman"},
{"id":8075,"value":["I accept the terms"]}
]';
$array = json_decode($json, true);
$key = array_search('4121', array_column($array, 'id'));
$value = array_column($array, 'value');
var_dump($key);
var_dump(array_column($array, 'value')[$key]);
?>
您应该使用array_column
获取所有ID,否则array_search
将尝试查找对象“4121”
,这不是您想要的。 否则您可以编写自己的算法:
$item = null;
foreach($array as $obj) {
if ($obj->id == '4121') {
$item = $obj;
break;
}
}
如果效率对您来说不是一个问题,而且您不会处理大的数据集,那么使用PHP的算法,否则考虑使用这个算法(使用array_column您有一个O(2*n)的复杂性,而使用这个解决方案O(n),因此它最多会快2倍)