3

PHP で作業する場合、連想配列があると仮定します。

'Monday' => 'mon'
'Tuesday' => 'tue'
'Wednesday' => 'wed'
'Thursday' => 'thur'
'Friday' => 'fri'
'Saturday' => 'sat'
'Sunday' => 'sun'

「循環」配列シフトをどのように実行できますか? 配列が水曜日から始まり、7 日間すべて進行し、火曜日で終わるように、物事をシフトしますか?

重要な注意: シフトを開始する必要がある日を決定する他のコードがあるため、これをキーで行う必要があります。

4

6 に答える 6

1

スライス、マージ、参照による処理。

function shiftArray( &$a, $k ) {
    $k = array_search( $k, array_keys( $a ) );
    $a = array_merge( array_slice( $a, $k ), array_slice( $a, 0, $k ) );
}

shiftArray( $week, "Wednesday" );

これは参照により機能するため、$weekそれ自体が再構築されました。新しいアレイはありません。

デモ:http ://codepad.org/uITGdMKy

于 2012-05-31T03:25:21.943 に答える
1
$key = array_keys($arr)[0]; // use a temporary variable in PHP before 5.4
$val = $arr[$key];
unset($arr[$key]);
$arr[$key] = $val;

これは最初のキーを取り、その値を保存し、それを配列から削除してから、再度追加します (配列の最後に配置します)。

于 2012-05-31T02:48:41.270 に答える
1

配列キーを維持しながら配列をシフトする:

function shiftArray($arr, $key) {
    foreach ($arr as $k => $v) {
        if ($k == $key) break;
        unset($arr[$k]);
        $arr[$k] = $v;
    }
    return $arr;
}

print_r(shiftArray($arr, 'Wednesday'));
/*
Array
(
    [Wednesday] => wed
    [Thursday] => thur
    [Friday] => fri
    [Saturday] => sat
    [Sunday] => sun
    [Monday] => mon
    [Tuesday] => tue
)
 */
于 2012-05-31T02:43:24.173 に答える