PHP array_diff_key() 为空但不应该

PHP array_diff_key() is empty but should not

我查询了一系列 tables 以便打印这些,我想打印每个 table 的所有键,即使这些值是空的,但是一组特定的键每个都相同table 不得打印。

我在一个数组中查询和获取结果 table:

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

var_export($array);returns:

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

我准备了一个数组中的坏键列表:

var_export($bad_keys);returns:

array ( 0 => array ( 'a' => '1', 'b' => '2019-01-05', ), )

对于每个 table 我想通过使用 array_diff_key():

$array 的查询结果中排除坏键 {a, b}
$array_new = array_diff_key($array, $bad_keys); 

var_dump($array_new); returns空:

array(0) { }.

$array_new 应该有键 {'c', 'd'} 但它没有。我没有在我的代码中看到错误。请帮忙。

array_diff_key 用于计算两个或多个数组的 keys 之间的差异,即具有所有 key/value 对的新数组 第一个数组参数 具有不存在于任何其他 数组参数的键 的键。

在您的代码中,您尝试将第一个数组的 keysvalues 的数组进行比较(即您的 $bad_keys,实际上有编号的索引),而不是 $bad_keys 数组的 keys不是array_diff_key的工作方式。

请务必查看参考资料:http://php.net/manual/en/function.array-diff-key.php

一种方法只提供您要查找的键作为数组:
只需将第一个数组的键创建一个新数组作为 values 然后使用 array_diff 将其与您的 $bad_keys.

进行比较

要获得 key/value 对,你可以使用这个(正如 Quasimodo 的克隆建议的那样):

array_diff_key($array, array_flip($bad_keys))

更新:第一个数组中的键也与 $bad_array 中的键不在同一级别。

我的错误:在 array_diff_key() 中我比较了两个多维数组,但没有为每个要比较的数组写索引 [0]。

解决方案:我将索引 [0] 添加到每个要比较的数组,另外我从 array_diff_key()

的结果创建了一个数组
$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 );

现在returns想要的结果:

array( 0 => 
     array( 
        'c' => '', 
        'd' => '', 
    ), 
);