array_key_exists не находит второй элемент массива

Вкратце — у меня есть два массива $ 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";
}

}

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

0

Другие решения

Если вы только после общих кодов, которые находятся в обоих массивах, вы можете использовать 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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector