【问题标题】:PHP Checkif two arrays have the same keys and same count of keys [duplicate]PHP检查两个数组是否具有相同的键和相同的键数[重复]
【发布时间】:2019-07-12 12:44:16
【问题描述】:

我正在尝试匹配如下所示的 2 个数组。

$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);

我的问题是,我需要两个数组的数组键是相同的值和相同的计数。

这意味着:

// passes - both arrays have the same key values and same counts of each key
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);

// fails - $public does not have 'blue' => 1
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('red' => 2, 'green' => 3, 'purple' => 4);

// should fail - $public has 2 'blue' => 1 
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('blue' => 1, 'blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);

我尝试过使用array_diff_keysarray_diff 和其他 php 函数,但没有一个可以捕获具有相同值的额外键(即如果 'blue' => 1,重复它仍然通过)

有什么好办法解决这个问题?

【问题讨论】:

  • 您最后的$public 数组无效,数组中不能有两个blue 键。如果你var_export(array('blue' => 1, 'blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4)) 你会得到array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4)
  • @SougataBose 你为什么删除你的答案是正确的......
  • 这个问题php无法解决,这就是php的行为方式,php获取distinct key的最后一个值

标签: php arrays


【解决方案1】:

当您在 PHP 中使用相同的键写入两个值时,第二个值将覆盖第一个值(这不是错误)。下面是我在 PHP 交互式 CLI 上所做的(使用 php -a 运行它):

php > $x = ["x" => 1, "x" => 2, "y" => 2];
php > var_dump($x);
array(2) {
  ["x"]=>
  int(2)
  ["y"]=>
  int(2)
}

所以array_diff 似乎工作正常。您只是希望 PHP 的行为方式与实际不同!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多