【问题标题】:PHP - Array_diff with two arrays with different dimensionPHP - Array_diff 具有两个不同维度的数组
【发布时间】:2015-03-21 21:45:16
【问题描述】:

我有这 2 个数组:

$haystack = array("rowid" => array("100", "200"), "description" => array ("something", "something else"));
$needle = array("rowid" => array("200", "300", "400"), "description" => array ("something else", "other", "other else"), "test" => "bye");

我想用 $needle 和 $haystack 做一个 array_diff,但我得到一个错误,因为 $needle 数组是多维的,但“测试”键只有一维:

foreach ($needle as $key => $value) :
$left[$key] = array_diff($needle[$key],$haystack[$key]);
endforeach;

警告:array_diff():参数 #1 不是数组
警告: array_diff(): 参数 #2 不是数组

我该如何解决这个问题? 我只需要在 $left 数组中维护“rowid”和“description”值(我可以丢弃“test”值)。

$left 应该是:

Array
(
    [rowid] => Array
        (
            [0] => 300
            [1] => 400
        )

    [description] => Array
        (
            [0] => other
            [1] => other else
        )

) 

感谢您的帮助!

【问题讨论】:

  • 你遍历你的数组并尝试array_diff每个元素。但是我们最后一个test-value 不是数组。所以你会收到警告。在使用 is_array() 将元素传递给函数之前检查元素

标签: php arrays search multidimensional-array array-difference


【解决方案1】:

删除“测试”=>“再见”;从 $needle 或以正确的方式编写它们。

//array_diff takes arguments as array.
foreach ($needle as $key => $value) :
$left[$key] = array_diff($needle[$key],$haystack[$key]);
//when $key = test $needle[$key]=bye which is not array 
//thats why you got Warning: array_diff(): Argument #1 is not an array  this warning

//again when $key=test ,$haystack[$key]=null which is not array
//thats why you got Warning: array_diff(): Argument #2 is not an array
endforeach;

【讨论】:

  • 好的。但是,如果我不知道 $needle 数组中有多少“测试”或其他键?如何仅过滤“rowid”和“description”键?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
相关资源
最近更新 更多