通过比较行来获取两个多维数组之间的差异
我有两个嵌套数组,需要找到引用数组和数据数组之间的差异。我正在使用 array_dif_assoc 函数,并且无法获得正确的差异,我不知道为什么我无法获得它。如果我犯了一些错误或者我必须递归地做,有人可以帮助我吗?
$allCoursesAvailable = array(array('id'=>0,'name'=>'Select-One'), array('id'=>1,'name'=>'course1'),array('id'=>1,'name'=>'course2'),array('id'=>3,'name'=>'course3'));
$allCoursesforUser = array(array('id'=>0,'name'=>'Select-One'), array('id'=>1,'name'=>'course1'),array('id'=>4,'name'=>'course4'),array('id'=>5,'name'=>'course5'),array('id'=>6,'name'=>'course4'));
echo '<pre>';print_r(array_diff_assoc($allCoursesAvailable,$allCoursesforUser));
我得到一个空数组。当我使用 array_diff_assoc() 时,我应该获得携带 course2 和 course3 的数组,因为它们不是第二个数组的一部分。
我是否缺少 PHP 端的一些逻辑?
I have two nested arrays and need to find the difference between the reference array and the data array. I am using array_dif_assoc function, and am unable to get the right difference, I am not sure why I am unable to get it. Could somebody help me out if I am doing some mistake or if I have to do it recursively;
$allCoursesAvailable = array(array('id'=>0,'name'=>'Select-One'), array('id'=>1,'name'=>'course1'),array('id'=>1,'name'=>'course2'),array('id'=>3,'name'=>'course3'));
$allCoursesforUser = array(array('id'=>0,'name'=>'Select-One'), array('id'=>1,'name'=>'course1'),array('id'=>4,'name'=>'course4'),array('id'=>5,'name'=>'course5'),array('id'=>6,'name'=>'course4'));
echo '<pre>';print_r(array_diff_assoc($allCoursesAvailable,$allCoursesforUser));
I am getting an empty array with this. When I use array_diff_assoc()
, I should have got the arrays carrying course2 and course3, as they are not part of the 2nd array.
Am I missing some logic on the PHP end?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您始终可以从阅读 PHP 手册开始。
对于
array_diff_assoc
(在http://php. net/manual/en/function.array-diff-assoc.php)据说此函数仅检查 n 维数组的一维。当然,您可以使用例如 array_diff_assoc($array1[0], $array2[0]); 来检查更深的维度。在用户评论中提供了解决方案(这确实有效):
You could always start by reading the PHP manual.
For
array_diff_assoc
(on http://php.net/manual/en/function.array-diff-assoc.php) it is said thatthis function only checks one dimension of a n-dimensional array. Of course you can check deeper dimensions by using, for example, array_diff_assoc($array1[0], $array2[0]);.
Provided solution in user comments (this does work):
您不应该使用
_assoc
而应使用普通的array_diff
或 < a href="http://php.net/array_intersect" rel="nofollow">array_intersect
,因为否则它将比较外部数组的顺序,而不仅仅是内容。另外 array_diff 并不真正适用于子数组,您需要一个解决方法:
这会给您:
不确定这是否是您想要的。手动执行此操作可能仍然是可取的。
You should not use
_assoc
but the normalarray_diff
orarray_intersect
, because otherwise it will compare the ordering of the outer array and not just the content.Also array_diff doesn't really work with subarrays, and you'd need a workaround:
Which would give you:
Not sure if that is what you wanted. And doing it manually might be advisable still.