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()、配列から重複を削除するために呼び出します。配列のすべての値が同じ場合、1 つの要素の配列が残ります。だから私はこれをチェックし、それが本当なら、すべての値は同じです。

于 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の答えが探しているものではなく、コレクション内の1つ以上の同じ値を確認したい場合はsort、配列をループして最後の値を保持し、それを現在の値と比較することができます.

于 2012-06-26T01:40:07.623 に答える