0

文字列を 1 ~ 7 個の値 (3、1234567、1234、357、46 など) の配列に変換しています。

1 から 7 までの任意の数値が与えられた場合、配列内の次の値を見つけるにはどうすればよいですか?

$str=12345;
$arr=str_split($str);

$end=end($arr);

if ($day==$end) {
    $next=reset($arr);
} else {
    $loc=array_search($day, $arr)+1;
    $next=$arr[$loc];
}

print $next;

上記の日が 1 の場合は 2 を返し、上記の日が 5 の場合は 1 を返しますが、どちらも正しいですが、日が 6 または 7 の場合は正しい値を返しません。配列が 1245 で日が3 再び正しい値が返されません。これは 4 である必要があります。

上記がすべてのシナリオで正しい値を返すようにするにはどうすればよいですか?

4

1 に答える 1

0
$values = array_filter($arr, function($v) use($day) {
    return $v > $day;
});

$value = $values ? array_shift($values) : array_shift($arr);

おそらく最適ではなく、テストもされていませんが、動作するはずです。

于 2013-10-18T03:34:30.010 に答える