9 つのことをチェックするスクリプト全体に対して foreach ループを実行しています。
それらのうちの 5 つが値 "a" を持ち、そのうちの 4 つが値 "b" を持っているとしましょう。
"a" と "b" を 1 回だけ返す IF 条件 (または何か) を作成するにはどうすればよいですか?
以前の内容を格納する変数を使用し、それを現在の反復と比較します (同様の項目が連続している場合にのみ機能します)。
$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;
}
}
// 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
$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
もっと具体的に教えてください(「コンテンツ」オブジェクトにコードスニペットを挿入すると役立つ場合があります)。
配列の一意の値を取得しようとしているようです:
$values = array(1,2,2,2,2,4,6,8);
print_r(array_unique($values));
>> array(1,2,4,6,8)