我有一个像这样的数组:
[items] => Array
(
[0] => Array
(
[qty] => 1
[class] => P
)
[1] => Array
(
[qty] => 1
[class] => P
)
[2] => Array
(
[qty] => 1
[class] => S
)
)
确定[class]值在所有内部数组中是否相同的最简单方法是什么?我是不是要循环遍历所有的,然后逐个比较?还是有更好的办法?
基于注释编辑
仅基于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
}
特性- 最多N-1次($ N-1)比较
- 使用
!==
而不是!=
来检查完全匹配(类型和值) - 将
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
}
$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
}