我要查询一系列表以打印这些表,并且即使值是空的,我也想打印每个表的所有键,但是不应打印与每个表相同的一组特定键。
我查询并在一个表的数组中获取结果:
spark.worker.cleanup.enabled true
spark.worker.cleanup.appDataTtl 86400
spark.master.rest.enabled true
$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', 'c' => '', 'd' => '', ), )
返回:
var_export($bad_keys);
对于每个表,我想使用array ( 0 => array ( 'a' => '1', 'b' => '2019-01-05', ), )
从$array
的查询结果中排除坏键{a,b}:
array_diff_key()
$array_new = array_diff_key($array, $bad_keys);
返回空:
var_dump($array_new);
。
array(0) { }
应该具有键{'c','d'},但没有。我没有在代码中看到错误。请帮忙。
答案 0 :(得分:4)
array_diff_key
用于计算两个或多个数组的键之间的差异,即,一个具有 first数组参数的所有键/值对的新数组 返回其他没有数组参数的键中不存在的键。
在代码中,您尝试将第一个数组的键与值数组(即您的$bad_keys
,实际上具有编号索引)进行比较,而不是$bad_keys
数组的键。 {strong>不是 array_diff_key
的工作方式。
请务必在以下位置查看参考:http://php.net/manual/en/function.array-diff-key.php
一种仅给您作为数组寻找键的方法:
只需将第一个数组的键的新数组作为值创建,然后使用array_diff
将其与您的$bad_keys
进行比较。
要获取键/值对,可以使用这一对(如Quasimodo的Clone建议):
array_diff_key($array, array_flip($bad_keys))
更新:第一个数组中的键也与$bad_array
中的键不在同一级别。
答案 1 :(得分:0)
我的错误:在array_diff_key()中,我比较了两个多维数组,但没有为要比较的每个数组编写索引[0]。
解决方案:我向要比较的每个数组添加了索引[0],此外,我还根据array_diff_key()的结果创建了一个数组
php artisan config:cache
现在返回所需结果:
$array = array( 0 =>
array(
'a' => '',
'b' => '',
'c' => '',
'd' => '',
),
);
$bad_keys = array( 0 =>
array(
'a' => '',
'b' => '',
),
);
$array_new = array( array_diff_key( $array[0], $bad_keys[0] ));
var_export( $array_new );