1

9 つのことをチェックするスクリプト全体に対して foreach ループを実行しています。

それらのうちの 5 つが値 "a" を持ち、そのうちの 4 つが値 "b" を持っているとしましょう。

"a" と "b" を 1 回だけ返す IF 条件 (または何か) を作成するにはどうすればよいですか?

4

2 に答える 2

2

簡単な方法(最後の値を確認)

以前の内容を格納する変数を使用し、それを現在の反復と比較します (同様の項目が連続している場合にのみ機能します)。

$last_thing = NULL;
foreach ($things as $thing) {
  // Only do it if the current thing is not the same as the last thing...
  if ($thing != $last_thing) {
    // do the thing
  }
  // Store the current thing for the next loop
  $last_thing = $thing;
}

より堅牢な方法 (使用済みの値を配列に格納)

または、複雑なオブジェクトがあり、内部プロパティをチェックする必要がある場合など、シーケンシャルではない場合は、使用されているものを配列に保存します。

$used = array();
foreach ($things as $thing) {
  // Check if it has already been used (exists in the $used array)
  if (!in_array($thing, $used)) {
    // do the thing
    // and add it to the $used array
    $used[] = $thing;
  }
}

例 (1):

// Like objects are non-sequential
$things = array('a','a','a','b','b');

$last_thing = NULL;
foreach ($things as $thing) {
  if ($thing != $last_thing) {
    echo $thing . "\n";
  }
  $last_thing = $thing;
}

// Outputs
a
b

例えば ​​(2)

$things = array('a','b','b','b','a');
$used = array();
foreach ($things as $thing) {
  if (!in_array($thing, $used)) {
    echo $thing . "\n";
    $used[] = $thing;
  }
}

// Outputs
a
b
于 2012-04-07T14:00:32.643 に答える
1

もっと具体的に教えてください(「コンテンツ」オブジェクトにコードスニペットを挿入すると役立つ場合があります)。

配列の一意の値を取得しようとしているようです:

$values = array(1,2,2,2,2,4,6,8);
print_r(array_unique($values));
>> array(1,2,4,6,8)
于 2012-04-07T14:02:14.630 に答える