我有一个如下所示的数组:
[items] => Array
(
[0] => Array
(
[qty] => 1
[class] => P
)
[1] => Array
(
[qty] => 1
[class] => P
)
[2] => Array
(
[qty] => 1
[class] => S
)
)
确定所有内部数组中[class]值是否相同的最简单方法是什么?我是否需要遍历所有这些并逐一比较?或者有更好的方法吗?
答案 0 :(得分:2)
根据评论进行修改
仅基于class
比较
$n = count($array['items']);
$elem = $array['items'][0]['class'];
for ($i=1 ; $i<$n ; $i++)
if ($elem !== $array['items'][$i]['class'])
break;
if ($i >= $n) {
// equal
}
功能
!==
而非!=
检查完美匹配(类型和值)elem
设置为第一个元素[0]
,以便PHP不必一直提取<小时/> 测试内部数组是否相等的解决方案
使用array_diff返回数组之间的差异。
例如,比较[items]
中的N个数组(最多进行N-1次比较)
$n = count($array['items']);
for($i=1 ; $i<$n ; $i++)
if (count(array_diff($array['items'][0], $array['items'][$i])))
break;
if ($i >= $n) {
// they are equal
}
array_diff()
返回被比较的数组中不的元素。计算返回的元素(count()
)可以检测差异。
请注意array_diff()
可以使用两个以上的数组来检查是否相等。如果你有一个固定数量的数组,你可以简单地做
// Compare 3 arrays
if (count(array_diff($array['items'][0], $array['items'][1], $array['items'][2]))) {
// Arrays differ
}
答案 1 :(得分:0)
$n = count($array['items']);
$flag=0;
for($i=0 ; $i<$n ; $i++)
{
if($i!=0)
{
if($array['items'][$i][class]!=$array['items'][$i-1][class])
{
$flag=1;
}
}
}
if($flag==1)
{
// they are equal
}