数组:我想要一个不连续顺序打印数组的函数

时间:2016-12-01 14:07:28

标签: php laravel

我有一个返回一个数组的函数,如果有多个值的数组,那么该数组就是' up'并且' down'。我想要打印两个连续值不相同的值。例如:如果第一个值为up,第二个值也为up,则应仅打印第一个值,同样为down。如果连续不同,它应该继续打印。因此输出预计会上升,下降,上升,下降?

$a_ret = [];    

            foreach ($o_response as $o_status) {                
                    $a_ret[] = [
                        'value' => $o_status->values,
                        'timestamp' => $o_status->created_at
                    ];
        }

        return $a_ret;

    }

3 个答案:

答案 0 :(得分:1)

此代码会将您放在返回数组中的每个值放在$last变量中。因此down, up, up up, down, up, up, down将成为down, up, down, up, down

$a_ret = [];    

$last = null;
foreach ($o_response as $o_status) {
    if($last != $o_status->values) {
        $a_ret[] = [
            'value' => $o_status->values,
            'timestamp' => $o_status->created_at
        ];
        $last = $o_status->values;
    } else {
        // Add this else if you want up, up, up to become up, up.
        // See  kapil.dev  comment on this answer
        $last = null;
    }
}

return $a_ret;

答案 1 :(得分:0)

你可以这样做:

$a = ['up', 'up', 'down', 'up', 'down', 'down'];

$arr = [];
foreach($a as $el) {
    if(!empty($arr)) {
        if(end($arr) != $el)
            $arr[] = $el;
    } else {
        $arr[] = $el;
    }
}

print_r($arr);

// Output: ['up', 'down', 'up', 'down']

希望这有帮助!

答案 2 :(得分:0)

你可以尝试这个

$a = ['up', 'up', 'down', 'up', 'down', 'down'];`

foreach($a as $value) {
    if($value != next($a)){
      echo $value;
    }
}