Если у меня есть следующий массив:
$array = array(
"01" => "0",
"02" => "0",
"03" => "0",
"04" => "0",
"05" => "0",
"06" => "0",
"07" => "0",
"08" => "0",
"09" => "0",
"10" => "0",
"11" => "0",
"12" => "0"
);
Как мне заказать, чтобы он был вроде:
$array = array(
"05" => "0",
"06" => "0",
"07" => "0",
"08" => "0",
"09" => "0",
"10" => "0",
"11" => "0",
"12" => "0",
"01" => "0",
"02" => "0",
"03" => "0",
"04" => "0"
);
Или даже лучше, как эхом отображать каждое значение, начиная с определенного ключа и возвращаясь при необходимости?
РЕДАКТИРОВАТЬ
В итоге я работал по-другому.
$first_value = 05;
$where_to_slice = $first_value + 0; // this is just to remove any leading 0 because the $first_value was being retrieved from a DB as 05.
$array_owner_data_1 =(array_slice($array_owner_data, $where_to_slice));
$array_owner_data_2 =(array_slice($array_owner_data, 0,$where_to_slice));
echo implode(", ", $array_owner_data_1);
echo ",";
echo implode(", ", $array_owner_data_2);
Итак, теперь, если я напечатаю оба фрагмента подряд, я получу данные, упорядоченные так, как я хотел.
4 ответа
Здесь функция поворота, вы не можете использовать array_shift, ключи будут изменены.
<?php
$array = array(
"01" => "0",
"02" => "0",
"03" => "0",
"04" => "0",
"05" => "0",
"06" => "0",
"07" => "0",
"08" => "0",
"09" => "0",
"10" => "0",
"11" => "0",
"12" => "0"
);
var_dump($array);
function rotate(&$a) {
reset($a);
$value = current( $a );
$key = key( $a );
unset( $a[ $key ]);
$a[$key] = $value;
}
for ($i = 0; $i < 4; $i++) {
rotate($array);
}
var_dump($array);
?>
Выход:
array(12) {
["01"]=>
string(1) "0"
["02"]=>
string(1) "0"
["03"]=>
string(1) "0"
["04"]=>
string(1) "0"
["05"]=>
string(1) "0"
["06"]=>
string(1) "0"
["07"]=>
string(1) "0"
["08"]=>
string(1) "0"
["09"]=>
string(1) "0"
[10]=>
string(1) "0"
[11]=>
string(1) "0"
[12]=>
string(1) "0"
}
array(12) {
["05"]=>
string(1) "0"
["06"]=>
string(1) "0"
["07"]=>
string(1) "0"
["08"]=>
string(1) "0"
["09"]=>
string(1) "0"
[10]=>
string(1) "0"
[11]=>
string(1) "0"
[12]=>
string(1) "0"
["01"]=>
string(1) "0"
["02"]=>
string(1) "0"
["03"]=>
string(1) "0"
["04"]=>
string(1) "0"
}
Попробуйте этот код
$ordering_position = 5;
$new_array = array();
$array_pos = 0
function order_array($ordering_position,$array){
while ($ordering_position < strlen($array){
$new_array[$array_pos] = $array[$ordering_position];
$array_pos = $array_pos + 1
$ordering_position = $ordering_position + 1
if ($array_pos == strlen($array)){
order_array(0,$array);
break;
}
}
}
echo new_array;
Это должно сработать для вас:
$month = "05";
$array = array(
"01" => "0",
"02" => "0",
"03" => "0",
"04" => "0",
"05" => "0",
"06" => "0",
"07" => "0",
"08" => "0",
"09" => "0",
"10" => "0",
"11" => "0",
"12" => "0"
);
$newArray = array();
for($i = $month; $i <= count($array)+$month; $i++)
$newArray[($i > 12 ? sprintf("%02d", $i-12) : sprintf("%02d", $i))] = $array[($i > 12 ? sprintf("%02d", $i-12) : sprintf("%02d", $i))];
print_r($newArray);
Установите индекс, который вы хотите начать:
$array = array(
'01' => '0',
'02' => '0',
'03' => '0',
'04' => '0',
'05' => '0',
'06' => '0',
'07' => '0',
'08' => '0',
'09' => '0',
'10' => '10',
'11' => '11',
'12' => '12'
);
function beginAt($array,$index){
$arr1=$arr2=$resp=array();
foreach($array as $k=>$v){if((int)$k < $index){$arr1[(string)$k] = $v;}else{$arr2[(string)$k] = $v;}}
foreach($arr2 as $k=>$v)$resp[(string)$k]=$v;
foreach($arr1 as $k=>$v)$resp[(string)$k]=$v;
return $resp;
}
var_dump(beginAt($array,7));
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.