Если у меня есть следующий массив:

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

Итак, теперь, если я напечатаю оба фрагмента подряд, я получу данные, упорядоченные так, как я хотел.

-2
Marvin 27 Фев 2015 в 18:03

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"
}
1
Ôrel 27 Фев 2015 в 15:30

Попробуйте этот код

$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;
0
Mohamed Ramzy Helmy 27 Фев 2015 в 15:21

Это должно сработать для вас:

$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);
1
Rizier123 27 Фев 2015 в 15:55

Установите индекс, который вы хотите начать:

$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));
1
miglio 27 Фев 2015 в 15:36