在PHP中工作,假设您有一个关联数组:
'Monday' => 'mon'
'Tuesday' => 'tue'
'Wednesday' => 'wed'
'Thursday' => 'thur'
'Friday' => 'fri'
'Saturday' => 'sat'
'Sunday' => 'sun'
你怎么能进行“循环”阵列转换?假设换档以使阵列从星期三开始,并持续整个7天,以星期二结束?
一个重要的注意事项:我需要通过密钥来完成此操作,因为我还有其他代码来确定需要从哪一天开始。
答案 0 :(得分: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);
答案 1 :(得分: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));
答案 2 :(得分: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
)
*/
答案 3 :(得分:1)
$key = array_keys($arr)[0]; // use a temporary variable in PHP before 5.4
$val = $arr[$key];
unset($arr[$key]);
$arr[$key] = $val;
这将获取第一个键,保存其值,将其从数组中删除,然后再次添加(将它放在数组的末尾)。
答案 4 :(得分: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
本身已经重组。没有新阵列。
答案 5 :(得分:0)
while (key($arr) !== $pivotKey) {
list($k, $v) = each($arr);
unset($arr[$k]);
$arr[$k] = $v;
}
在进入循环之前确保密钥存在。