Php 循环移位关联数组?

Php 循环移位关联数组?,php,associative-array,Php,Associative Array,使用PHP时,假设您有一个关联数组: 'Monday' => 'mon' 'Tuesday' => 'tue' 'Wednesday' => 'wed' 'Thursday' => 'thur' 'Friday' => 'fri' 'Saturday' => 'sat' 'Sunday' => 'sun' 如何执行“循环”数组移位?比如说改变事情,让数组从星期三开始,持续7天,到星期二结束 重要提示:我需要按键执行此操作,因为我有其他代码确定轮班需要在

使用PHP时,假设您有一个关联数组:

'Monday' => 'mon'
'Tuesday' => 'tue'
'Wednesday' => 'wed'
'Thursday' => 'thur'
'Friday' => 'fri'
'Saturday' => 'sat'
'Sunday' => 'sun'
如何执行“循环”数组移位?比如说改变事情,让数组从星期三开始,持续7天,到星期二结束


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

在保持数组键的同时移动数组:

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
)
 */
这将获取第一个键,保存它的值,从数组中删除它,然后再次添加它(这将把它放在数组的末尾)

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

无需循环

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));
 $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);

切片、合并、引用句柄

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
本身已被重新构造。没有新阵列


演示:

您的意思是移动值,然后将值推回到数组的末尾吗?基本上是这样。在我的示例中,删除星期一和星期二,并将其推到数组的末尾即可实现目标。对不起,我应该指定。我需要用钥匙做这件事。它不会总是在同一个位置。如果您的键顺序不正确,您将需要第二个数字索引数组,其中包含按所需顺序排列的键。然后,您应该对第二个数组执行移位和推进。另外,
$arr[]=数组移位($arr)
比使用
array\u push()
工作起来像一个mf'ng梦想要好一些。美好的这个答案很好,因为它节省了一个循环,而且我实际上可以运行数学。如果我想要星期二,但是给我的键是星期三,我可以简单地从键中减去1。是的,这个函数是删除值
 $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);
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" );