我有一个返回一个数组的函数,如果有多个值的数组,那么该数组就是' 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;
}
答案 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;
}
}