Разница в массиве — PHP array_diff_key () пуст, но не должен

Я запрашиваю серию таблиц, чтобы распечатать их, и я хочу напечатать все ключи каждой таблицы, даже если значения являются пустыми, но определенный набор ключей, которые являются одинаковыми для каждой таблицы, не должен печататься.

Мой запрос и выборка результата в массиве для одной таблицы:

$stmt = $db_conn->prepare("SELECT * FROM table;");
$stmt->execute();
$array = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt->closeCursor();

var_export($array);возвращает:

array ( 0 => array ( 'a' => '1', 'b' => '2018-12-21 15:22:12.537', 'c' => '', 'd' => '', ), )

Я подготовил список плохих ключей в массиве:

var_export($bad_keys);возвращает:

array ( 0 => array ( 'a' => '1', 'b' => '2019-01-05 22:07:18.360', ), )

Для каждой таблицы я хочу исключить плохие ключи {a, b} из результата запроса в $array с помощью array_diff_key():

$array_new = array_diff_key($array, $bad_keys);

var_dump($array_new); возвращает пустое:

array(0) { },

$array_new должен иметь ключи {‘c’, ‘d’}, но не имеет. Я не вижу ошибки в моем коде. Пожалуйста помоги.

-2

Решение

array_diff_key используется для вычисления разницы между ключи из двух или более массивов, то есть нового массива со всеми парами ключ / значение первый аргумент массива имея ключи не существует ни в одном другом ключи аргумента массива возвращаются.

В своем коде вы пытаетесь сравнить ключи вашего первого массива с массивом ценности (т. е. ваш $bad_keysна самом деле с пронумерованными индексами), а не ключи из $bad_keys массив. Это не как array_diff_key работает.

Не забудьте проверить ссылку на: http://php.net/manual/en/function.array-diff-key.php

Один метод дает вам только те ключи, которые вы ищете в виде массива:
Просто создайте новый массив ключей первого массива как ценности а затем использовать array_diff сравнить это с вашим $bad_keys,

Чтобы получить пары ключ / значение, вы можете использовать эту (как предложил Клон Квазимодо):

array_diff_key($array, array_flip($bad_keys))

ОБНОВЛЕНИЕ: ключи в первом массиве также не находятся на том же уровне, что и ключи в $bad_array,

4

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

Других решений пока нет …

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