2016-11-30 80 views
0

我在訂購數組元素時遇到了一個簡單的問題。 假設我們有這樣編輯數組的位置

[0]=>zero 
[1]=>one 
[2]=>two 
[3]=>three 

數組我想要的是將一些元素,以第一位置移動。例如一個和兩個第一位置的方式,所以我將有:

[1]=>one 
[2]=>two 
[0]=>zero 
[3]=>three 

這應該在不知道元素在數組中的當前位置的情況下完成,這意味着它應該通過指定要移動的元素的名稱來完成。 我想過array_splice(),但它不會工作,因爲我應該指定數組中的元素的關鍵。

回答

0

你可以建立兩個數組(一個帶有搜索值,另一個沒有)併合並它們。請記住,如果你想保持數字鍵,you should use the + operator instead of array_merge

<?php 

$array = array('zero', 'one', 'two', 'three'); 
$searched_values = array('one', 'two'); 
$array_first = $array_second = array(); 

foreach ($array as $key=>$value) { 
    if (in_array($value, $searched_values)) 
     $array_first[$key] = $value; 
    else 
     $array_second[$key] = $value; 
} 

$array_end = $array_first + $array_second; 

echo '<pre>'; print_r($array_end); echo '</pre>'; 

返回:

Array 
(
    [1] => one 
    [2] => two 
    [0] => zero 
    [3] => three 
) 

編輯:保持$searched_values爲了

在這種情況下,你只需要循環遍歷值以建立一個已找到的值的數組,同時刪除初始數組的條目:

<?php 
    $array = array('zero', 'one', 'two', 'three'); 
    $searched_values = array('one', 'three', 'two'); 
    $array_found = array(); 
    foreach ($searched_values as $key=>$value) { 
     $found_key = array_search($value, $array); 
     if ($found_key !== false) { 
      $array_found[$found_key] = $value; 
      unset($array[$found_key]); 
     } 
    } 
    $array_end = $array_found + $array; 
    echo '<pre>'; print_r($array_end); echo '</pre>'; 
?> 

返回:

Array 
(
    [1] => one 
    [3] => three 
    [2] => two 
    [0] => zero 
) 
+0

@ roberto66它工作正常,但它也有一些問題,像元素 – Yassine

+0

<順序? $ array = array('zero','one','two','three'); $ searching_values = array('one','three','two'); $ array_first = $ array_second = array(); ($ array,$ key => $ value){ if(in_array($ value,$ searches_values)) $ array_first [$ key] = $ value;其他 $ array_second [$ key] = $ value; } $ array_end = $ array_first + $ array_second; print_r($ array_end); ?> – Yassine

+0

而不是輸出一個三個兩個零它輸出一個兩個三個零 – Yassine

0

我能想到做到這一點的唯一方法是刪除它,然後將其添加:

$key = array_search('one', $array); // $key = 1; 
$v = $my_array[$key]; 
unset($my_array[$key]); 

array_unshift($my_array, $v); 

輸出:

[0] => one 
[1] => zero 
[2] => two 
[3] => three 

UPDATE:

如果使用array_unshift也不會覆蓋你當前的元素。