array_key_exists找不到第二个数组元素

时间:2017-09-12 13:16:48

标签: php arrays

简而言之 - 我有两个$ XML和$ DB数组,两者都有像代码一样的值。

我预先考虑第一个,我下载代码并在第二个$ DB中查找代码。如果$ DB包含代码 - 我将显示存在的信息,如果不包含 - 它不显示。至少我希望它是 - 因为代替键中数据的信息,我得到了其他的

$XML = array(
    array(
        "code" => 456,
    ),
    array(
        "code" => 789,
    ),
);

$DB = array(
    array(
        "code" => 456,
    ),
    array(
        "code" => 789,
    ),
);

foreach ($XML as $product) {


    if (array_key_exists($product['code'], $DB)) {

        echo "Key is in DB array";

    } else {

        echo "Key isn't in DB array";
    }

}

2 个答案:

答案 0 :(得分:1)

如果您只是在两个数组中的共享代码之后,可以使用array_intersect和array_column。

<?php

function codes_shared(array $one, array $two) {
    return array_intersect(array_column($one, 'code'), array_column($two, 'code'));
}

示例:

$xml = array(
    array(
        "code" => 456,
    ),
    array(
        "code" => 789,
    ),
);

$one = array(
    array(
        "code" => 789,
    ),
    array(
        "code" => 123,
    ),
);
$two = array(
    array(
        "code" => 456,
    ),
    array(
        "code" => 99,
    ),
);
$three = array(
    array(
        "code" => 33,
    ),
    array(
        "code" => 1,
    ),
);
$four = array(
    array(
        "code" => 456,
    ),
    array(
        "code" => 789,
    ),
);
foreach([$one, $two, $three, $four] as $db) {
    var_dump(codes_shared($xml, $db));
}

输出:

array(1) {
[1]=>
int(789)
}
array(1) {
[0]=>
int(456)
}
array(0) {
}
array(2) {
[0]=>
int(456)
[1]=>
int(789)
}

答案 1 :(得分:0)

您正在尝试将一个数组的值检查为另一个数组的值。

所以您需要in_array array_column,如下所示: -

<强> 说明: -

1. in_array搜索数组中是否存在值。

2. array_column根据从多维数组中给出的索引名称给出一维数组。

3.现在代码将变成这样: -  if (in_array(456, Array(0 => 456,1 => 789)){

现在它可以正常工作。

$db_array = array_column($DB,'code');
foreach ($XML as $product) {
    if (in_array($product['code'],$db_array )) {
        echo "Product code ".$product['code']." is in DB array\n";
    } else {
        echo "Product code ".$product['code']." isn't in DB array\n";
    }
}

输出: - https://eval.in/860191