2016-11-30 83 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也不会覆盖你当前的元素。