通过将数组拆分为2来重新排序,并将第一部分添加到末尾


Re-order an array by splitting it in 2 and add the first part to the end

我想把一个数组分成两部分,并在末尾添加第一个切片。它应该拆分的点在另一个变量中设置。

$where = 7;
$array = array( 1 => "aaa", 2 => "bbb", 7 => "ccc", 13 => "ddd", 20 => "eee" );
//...code...
//I'd like to have
$array = array(7 => "ccc", 13 => "ddd", 20 => "eee", 1 => "aaa", 2 => "bbb" );

如何做到这一点?

foreach($array as $key=>$value)
{
    if ($key === $where)
    {
        break;
    }
    unset($array[$key]);
    $array[$key] = $value;
}

您可以使用array_slice()对数组进行两次拆分-->

$arr1 = array_slice($array, 0, $where-1);
$arr2 = array_slice($array, $where, count($array)-1);
$array = array();
$array[] = $arr2;
$array[] = $arr1;
function split_array($array, $where) {
    $temp_array = array();
    foreach ($array as $key => $value) {
         if($key != $where) {
               $temp_array[$key] = $value;
               unset($array[$key]);
         }
         else {
               break;
         }
    }
    //return array_merge($array, $temp_array);
    return ($array+$temp_array);
}

您可以使用带有偏移量array_slice()来拆分数组,并使用数组并集运算符连接这两个块。

$where = 7;
$array = array( 1 => "aaa", 2 => "bbb", 7 => "ccc", 13 => "ddd", 20 => "eee" );
$offset = array_search($where, array_keys($array), true);
if ($offset !== false) {
    $array = array_slice($array, $offset, null, true) + $array;
}