PHP:如何从另一个对象数组的数组中查找值

时间:2018-07-16 04:40:19

标签: php arrays

我有一个主数组Array X

[
{'id': 3, 'name':'A'},
{'id': 5, 'name':'B'}
]

同时,我还有另一个数组,数组Y:[3,5,12]

我的目标是检查数组X中的任何对象中是否存在数组Y中的任何值作为id。即使存在匹配项,我也想返回True。

我尝试了array_search()和array_in(),但不确定如何编写逻辑。

感谢您的帮助。这是用PHP

4 个答案:

答案 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';