3

在 PHP 中工作,假设您有一个关联数组:

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

您如何执行“循环”数组移位?说改变事情,使阵列从星期三开始,并持续到所有 7 天,以星期二结束?

重要说明:我需要按键执行此操作,因为我有其他代码确定轮班需要从哪一天开始。

4

6 回答 6

4

无需循环

 $arr=array('Monday' => 'mon',
'Tuesday' => 'tue',
'Wednesday' => 'wed',
'Thursday' => 'thur',
'Friday' => 'fri',
'Saturday' => 'sat',
'Sunday' => 'sun');
//say your start is wednesday
$key = array_search("Wednesday",array_keys($arr));
$output1 = array_slice($arr, $key); 
$output2 = array_slice($arr, 0,$key); 
$new=array_merge($output1,$output2);
print_r($new);
于 2012-05-31T03:05:41.903 回答
3
function curcle_shift($arr, $n) {
  return array_slice($arr, $n % 7) + array_slice($arr, 0, $n % 7);
}

// ex. shift the first 2.
var_dump(curcle_shift($arr, 2));
于 2012-05-31T02:56:23.980 回答
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 回答
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( &$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 回答
0
while (key($arr) !== $pivotKey) {
    list($k, $v) = each($arr);
    unset($arr[$k]);
    $arr[$k] = $v;
}

在进入循环之前确保密钥存在。

于 2012-05-31T02:55:43.847 回答