我有一个主数组Array X
[
{'id': 3, 'name':'A'},
{'id': 5, 'name':'B'}
]
同时,我还有另一个数组,数组Y:[3,5,12]
我的目标是检查数组X中的任何对象中是否存在数组Y中的任何值作为id。即使存在匹配项,我也想返回True。
我尝试了array_search()和array_in(),但不确定如何编写逻辑。
感谢您的帮助。这是用PHP
答案 0 :(得分:2)
简单易懂的解决方案。
-首先更正json结构的格式。
-遍历$x
数组,并在每次迭代中检查在id
数组中找到的$y
的值。
$x = json_decode('[{"id": 3, "name":"A"},{"id": 5, "name":"B"}]', TRUE);
$y = [3,5,12];
$search = search($x, $y);
echo $search;
function search($x, $y) {
foreach($x as $val){
if (in_array($val['id'], $y))
return "exists";
}
return "not exists";
}
答案 1 :(得分:0)
首先,这不是有效的JSON。 [ {'id':3,'名称':'A'}, {'id':5,'名称':'B'} ]
正确的json就像这样:
[{"id": 3,"name": "A"},{"id": 5,"name": "B"}]
所以您已经做了类似的事情
function findInJson($searchArray){
$jsonString = '[{"id": 3,"name": "A"},{"id": 5,"name": "B"}]';
$jsonArray = json_decode($jsonString, true); // Incase you want to user your own array you can use it here
$keys = array_column($jsonArray, 'id');
return (count(array_intersect($keys, $searchArray)) !== 0);
}
// Call like this
$common = findInJson([3,5,12]);
var_dump($common);
答案 2 :(得分:0)
也许是这样吗?请注意,我假设使用PHP数组而不是JSON对象作为输入。时间复杂度为O(n ^ 2)。
$x = [
['id' => 3, 'name' => 'A'],
['id' => 5, 'name' => 'B']
];
$y = [3, 5, 12];
$z = [1, 14, 13];
function any_in_arr($needle_arr, $haystack, $field) {
foreach ($haystack as $h) {
foreach ($needle_arr as $n) {
if ($h[$field] === $n) { return true; }
}
}
return false;
}
var_dump(any_in_arr($y, $x, 'id')); // true
var_dump(any_in_arr($z, $x, 'id')); // false
答案 3 :(得分:0)
另一种仅具有数组功能且没有循环的解决方案。
$x = json_decode('[{"id": 3, "name":"A"},{"id": 5, "name":"B"}]', true);
$x = array_column($x,'name','id');
$y = [3,5,12];
$y = array_flip($y);
$res = array_intersect_key($x, $y);
echo empty($res) ? 'not exist' : 'exist';