检查数组中是否存在值时出现问题。我在数据库中有字段,我在JSON
中保存我的数据,我这样做:
$this_will_be_saved = json_encode($array);
现在我需要向数组中添加一些数据,但我需要检查数组是否已经包含该元素:
$this_will_be_saved = json_decode($this_will_be_saved, true);
解码数组结构:
array(5) {
[0]=>
array(2) {
["rating"]=>
int(9)
["userid"]=>
int(1)
}
[1]=>
array(2) {
["rating"]=>
int(9)
["userid"]=>
int(1)
}
[2]=>
array(2) {
["rating"]=>
int(9)
["userid"]=>
int(1)
}
[3]=>
array(2) {
["rating"]=>
int(1)
["userid"]=>
int(1)
}
[4]=>
array(2) {
["rating"]=>
int(7)
["userid"]=>
int(1)
}
}
我尝试检查数组中是否存在新增值但array_search无法正常工作:/
$key = array_search($userid, array_column($this_will_be_saved, 'userid'));
if ( $key ) {
// found
} else {
// not found
}
它总是没有创建任何东西:/即使我的用户ID已经存在......
答案 0 :(得分:1)
array_search()
返回第一个相应的键,如果它在数组中找到值。
在布尔上下文中计算时,数组的第一个键是0
,与false
相同(当它在数组中找不到值时,由array_search()
返回)。登记/>
if
表达式就是这样的上下文(代码中为if ($key)
)。
因此,如果$userid
为1
,则array_search()
会返回0
,而if
语句会正确获取else
分支。
使用in_array()
检查数组中是否存在值:
$found = in_array($userid, array_column($this_will_be_saved, 'userid'));
if ($found) {
// found
} else {
// not found
}