如果相同值,如何跳过foreach?

时间:2016-10-19 07:58:05

标签: php loops

我有代码

的循环值
foreach($season  as $seasons){  
echo  $seasons->Combined_season ; 
   } 

,结果是0000000011111111111111111111111222222222222222222222333333333333333333333333344444444444444444444444555555555

如果有相同的值,如何跳过? 我希望结果是 012345

5 个答案:

答案 0 :(得分:3)

您正在寻找"独特的"价值观:

<?php
foreach($season  as $seasons){  
    $result[$seasons->Combined_season] = $seasons->Combined_season;
} 
echo implode('', $result);

有点尴尬但内存效率更高的版本就是这样:

<?php
foreach($season  as $seasons){  
    $result[$seasons->Combined_season] = null;
} 
echo implode('', array_keys($result));

最有效的变体:

<?php
foreach($season  as $seasons){  
    $result[$seasons->Combined_season] = null;
} 
$value = array_keys($result);

所有方法都具有以下优点:在每次循环迭代中都需要条件,这使得它们对于更大的输入集更有效。

这是一个更新,以回答您的其他问题:

我在评论中不止一次提到变体2和3提供了你想要的东西。您只需要在内部使用这些值,而不是将它们用于输出。

以下是完全从上面开始的第三种方法,唯一的区别是我在评论中做了我之前告诉过你的事情:使用这些值而不是使用它们。据我所知,它提供完全您正在寻找的东西:

Dim lines() As String = File.ReadAllLines(filename) 

答案 1 :(得分:2)

<?php
$values = [];
foreach($season  as $seasons){
    if(! in_array($seasons->Combined_season, $values)) {
        $values[] = $seasons->Combined_season;
        echo $seasons->Combined_season ;
    }
}

答案 2 :(得分:0)

{{1}}

基本上,您将任何新值存储在数组中,并在打印值之前,检查它是否已存在于该数组中。

答案 3 :(得分:0)

使用“数组方法”可能是最好的方法。但是,如果您的结果按照示例中的顺序排序,则可以使用其他方法,当前值

$curr_val = '';
foreach($season  as $seasons){
   if ($seasons->Combined_season != $curr_val){
      echo  $seasons->Combined_season ; 
      $curr_val = $seasons->Combined_season ;
   } 
}

答案 4 :(得分:-1)

您可以使用外部变量:

$old_value = '';

foreach($season  as $seasons){ 
    $new_value = $seasons->Combined_season; 
    if($old_value != $new_value)
    {
        echo $new_value;
        $old_value = $new_value;
    } 
}