0

有没有办法轻松检查多个变量的值是否相等?例如,在下面的代码中,我有 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

4

3 回答 3

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()从数组中删除重复项。如果数组的所有值都相同,这将给我们留下一个包含一个元素的数组。所以我检查了这个,如果它是真的,那么所有的值都是一样的。

于 2012-06-26T01:29:21.337 回答
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';
?>
于 2012-06-26T01:46:56.407 回答
0

如果@John Conde 的答案不是您想要的,并且您想检查集合中的一个或多个相同值,您可以sort使用数组然后循环遍历它,保留最后一个值并将其与当前值进行比较.

于 2012-06-26T01:40:07.623 回答