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



我的功能可以返回一个数组,如果充满'up''和'down'之类的值,则数组。我要打印两个连续值不相同的值。示例:如果第一个值已升起,并且第二个值也向上升起,则它应仅打印第一个值,同样是为down。如果连续的不同,它应该继续打印。因此,预计输出将向上,向下,向上,向下?

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

此代码将将您放入返回数组中的每个最后一个值放在$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;

您可以简单地这样做:

$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']

希望这会有所帮助!

您可以尝试此

$a = ['up', 'up', 'down', 'up', 'down', 'down'];`
foreach($a as $value) {
    if($value != next($a)){
      echo $value;
    }
}

最新更新