有没有办法轻松检查多个变量的值是否相等?例如,在下面的代码中我有10个值,使用等号检查它们是否全部相等是很麻烦的。
<?
foreach($this->layout as $l):
$long1=$l['long1_campaignid'];
$long2=$l['long2_campaignid'];
$long3=$l['long3_campaignid'];
$long4=$l['long4_campaignid'];
$long5=$l['long5_campaignid'];
$long6=$l['long6_campaignid'];
$long7=$l['long7_campaignid'];
$long8=$l['long8_campaignid'];
$long9=$l['long9_campaignid'];
$long10=$l['long10_campaignid'];
endforeach;
?>
例如,如果$ long1 = 3,$ long2 = 7,$ long3 = 3,$ long4 = 7,$ long5 = 3等,
我需要检索$ long1 = $ long3 = $ long5和$ long2 = $ long4
答案 0 :(得分:1)
我认为这就是你要找的东西:
<?
foreach($this->layout as $l):
$m = array_unique($l);
if (count($m) === 1) {
echo 'All of the values are the same<br>';
}
endforeach;
?>
我假设您正在查看数组中的所有值是否相同。所以为了做到这一点,我调用array_unique()
来删除数组中的重复项。如果数组的所有值都相同,那么将为我们提供一个元素的数组。所以我检查了这个,如果是,那么所有的值都是一样的。
答案 1 :(得分:1)
该问题的例子显示“分组”并非直接关于“找到相等的变量”。
我认为这个简单的“分组而不改变顺序”算法就是答案......使用sort()
的其他算法也很容易用PHP实现。
<?
foreach($this->layout as $l) {
$m = array();
foreach($1 as $k=>$v) // keys 'longX' and values
if (array_key_exists($v,$m)) $m[$v][] = $k;
else $m[$v] = array($k);
foreach ($m as $val=>$keys)
if (count($keys)>1) echo "<br/> have SAME values: ".join(',',$keys)
}
?>
另一个(简单)代码,请参阅PHP man of array_unique上的示例#2。
<?
$m = array_unique($this->layout);
$n = count($m);
if ($n == 1)
echo 'All of the values are the exactly the same';
elseif ($n>0)
echo 'Different values';
else
echo 'No values';
?>
“相等标准”可能需要对字符串进行一些过滤,规范化空格,低/大写等。只有使用这种“灵活相等”才能证明循环。例如:
<?
$m = array();
foreach($this->layout as $l)
$m[trim(strtolower($1))]=1;
$n = count(array_keys($m));
if ($n == 1)
echo 'All of the values are the exactly the same';
elseif ($n>0)
echo 'Different values';
else
echo 'No values';
?>
答案 2 :(得分:0)
如果@John Conde的答案不是你想要的,你想要检查集合中的一个或多个相同的值,你可以sort
数组然后循环它,保持最后一个价值并将其与当前价值进行比较。