PHP array_diff_key()为空,但不应为空

时间:2019-01-05 21:33:06

标签: php array-difference

我要查询一系列表以打印这些表,并且即使值是空的,我也想打印每个表的所有键,但是不应打印与每个表相同的一组特定键。

我查询并在一个表的数组中获取结果:

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'},但没有。我没有在代码中看到错误。请帮忙。

2 个答案:

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