2012-06-30 42 views
63

Phương pháp di chuyển bất kỳ phần tử nào của mảng kết hợp đến đầu mảng là gì?PHP: Di chuyển phần tử kết hợp thành phần bắt đầu của mảng

Ví dụ, nói rằng tôi có các mảng sau:

$myArray = array(
    'two' => 'Blah Blah Blah 2', 
    'three' => 'Blah Blah Blah 3', 
    'one' => 'Blah Blah Blah 1', 
    'four' => 'Blah Blah Blah 4', 
    'five' => 'Blah Blah Blah 5', 
); 

gì tôi muốn làm là di chuyển các yếu tố 'one' để bắt đầu và kết thúc với các mảng sau:

$myArray = array(
    'one' => 'Blah Blah Blah 1', 
    'two' => 'Blah Blah Blah 2', 
    'three' => 'Blah Blah Blah 3', 
    'four' => 'Blah Blah Blah 4', 
    'five' => 'Blah Blah Blah 5', 
); 

Trả lời

125

Công trình này hoạt động:

$myArray = array('one' => $myArray['one']) + $myArray; 
+0

Điều đó thực sự hiệu quả! Cảm ơn bạn. –

+2

Bất kỳ ý tưởng nào về hiệu suất của O lớn này? – andrewtweber

+3

@andrewtweber Không, tôi không, nhưng tôi đã làm một số thử nghiệm và thấy rằng, so với cách tiếp cận của Emil, nó là 3x nhanh hơn và mất một nửa bộ nhớ nhiều. Tôi cũng thấy rằng phải mất 20% thời gian nhiều hơn di chuyển cùng một phần tử đến cuối mảng. –

-1

Có chức năng trong nhận xét hướng dẫn sử dụng PHP cho array_unshift có thể được sử dụng để thêm một phần tử, với chìa khóa, với đầu của một mảng:

function array_unshift_assoc(&$arr, $key, $val) 
{ 
    $arr = array_reverse($arr, true); 
    $arr[$key] = $val; 
    return array_reverse($arr, true); 
} 

Bỏ đặt phần tử và lắp nó một lần nữa với chức năng trên:

$tmp = $myArray['one']; 
unset($myArray['one']); 
$myArray = array_unshift_assoc($myArray, 'one', $tmp); 

Một cách tiếp cận tổng quát hơn có thể sử dụng uksort để sắp xếp mảng của bạn theo các khóa và cung cấp chức năng sắp xếp của riêng bạn.

+0

Hi - cảm ơn câu trả lời, mặc dù tôi không muốn sắp xếp mảng theo bất kỳ cách nào.Tôi muốn để có thể biết một yếu tố quan trọng và di chuyển chỉ rằng yếu tố specfic vào đầu của mảng –

+0

Tôi nghĩ rằng "=" là một lỗi cú pháp: 'return = array_reverse ($ arr, true);' –

+0

Ngoài ra, khi Tôi chạy mã của bạn Tôi nhận được một mảng với chỉ có một phần tử trong đó ... :-( –

3

Nếu bạn có các phím mảng số và muốn reindex phím mảng, nó sẽ là tốt hơn để đặt nó vào array_merge như thế này:

$myArray = array_merge(array($key => $value) + $myArray); 
1

Một hơi muộn, nhưng trong trường hợp bất cứ ai cần nó, tôi tạo này đoạn mã nhỏ.

function arr_push_pos($key, $value, $pos, $arr) 
{ 
    $new_arr = array(); 
    $i = 1; 

    foreach ($arr as $arr_key => $arr_value) 
    { 
     if($i == $pos) 
      $new_arr[$key] = $value; 

     $new_arr[$arr_key] = $arr_value; 

     ++$i; 
    } 

    return $new_arr; 
} 

Chỉ cần điều chỉnh nó cho phù hợp với nhu cầu của bạn hoặc sử dụng và bỏ chỉ mục để di chuyển. Làm việc với mảng kết hợp quá.

+0

Sửa đổi: $ new_arr [$ arr_key] = $ arr_value; Phải là: if ($ arr_key! = $ key) \t \t \t $ new_arr [$ arr_key] = $ arr_value; Nhưng ngược lại: tuyệt vời! 1up. – nzn

0

Đây là một đơn giản một-liner mà được làm điều này bằng array_splice():

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray; 
0
//source array  
$myArray = array(
    'two' => 'Blah Blah Blah 2', 
    'three' => 'Blah Blah Blah 3', 
    'one' => 'Blah Blah Blah 1', 
    'four' => 'Blah Blah Blah 4', 
    'five' => 'Blah Blah Blah 5', 
); 
// set necessary order 
$orderArray = array(
    'one' => '', 
    'two' => '', 
); 
//apply it 
$result = array_replace($orderArray, $myArray); 
print_r($result); 
0

tôi thích array-merge với @ giải pháp Mark.

$myArray = array_merge(['one' => $myArray['one']], $myArray);

Các vấn đề liên quan