2016-11-30 2 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 
) 

EDIT: Ведение $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

$ value) { if (in_array ($ value, $ search_values)) $ array_first [$ key] = $ value; else $ 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 не будет переопределить текущий элемент.

Смежные вопросы