2010-07-26 2 views
1

У меня есть массив, похожий на {A, B, C, D, E, F, G, H}. Я хотел бы иметь возможность выбрать индекс или запись и изменить массив. Так сказать, если я имел функциюРеорганизация массива в PHP

reorder('C'); 

Было бы вернуть массив, начиная с C, с чем до этого индекса добавляется к концу, так что этот пример даст

{C,D,E,F,G,H,A,B} 

Есть функция что уже делает это?

Благодаря

EDIT: Я использовал это в конце концов

$key = array_search($imgToShow, $imgList);  
$sliceEnd = array_slice($imgList, 0, $key);  
$sliceStart = array_slice($imgList, count($sliceEnd));  
$array = array_merge($sliceStart, $sliceEnd); 

ответ

7

Что вы можете сделать, это просто сдвиг массива магии.Первый заказ массив, если он еще не заказал, если он есть, пропустите этот шаг:

sort($array); 

Затем найти значение, которое вы хотите начать заказ:

$key = array_search('C', $array); 

Затем удалите часть массив перед тем найденный ключ:

$slice = array_splice($array, 0, $key); 

Затем добавьте кусочек в конце массива:

array_splice($array, count($array), 0, $slice); 
+0

Вы даже проверить, что? – Gumbo

+0

На самом деле нет, немного торопился, немного исправил ответ. :П –

0

Существует не функция, которая делает это, но вы можете написать один-лайнер, используя array_splice()/array_slice() функции это сделало бы это.

1

Не изначально.

Вы должны использовать usort (http://www.php.net/manual/en/function.usort.php) с пользовательской функцией обратного вызова.

Смотрите этот пример в предыдущем URL:

function cmp($a, $b) 
{ 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

$a = array(3, 2, 5, 6, 1); 

usort($a, "cmp"); 
0

, насколько я знаю, не существует предопределенная функция, чтобы сделать это. вы можете использовать срез массива и array_splice для создания такой функции.

array_slice() возвращает последовательность элементов из массива массива, заданную параметрами смещения и длины.

и array_splice() удаляет элементы, обозначенные смещением и длиной из входного массива, и заменяет их элементами заменяющего массива, если они поставляются.

определение: http://www.php.net/manual/en/function.array-splice.php

надеюсь, что это помогает

0
function reorder ($val, $ar){ 
    $p=array_search($val, $ar); 
    $l=count($ar); 

    for($j=0;$j<$l;j++){ 
    $nar[$j]=$ar[fmod($p,$l)]; 
    $p+=1; 
    } 
    return $nar; 
} 
3

Вы можете использовать array_search, чтобы найти индекс соответствующего значения, а затем array_splice, чтобы удалить вторую часть (индекса до конца) от конца и положить его в передней части первой части (от 0 до индекс -1) из массива:

$arr = array('A','B','C','D','E','F','G','H'); 
if (($i = array_search('C', $arr)) !== false) { 
    array_splice($arr, 0, 0, array_splice($arr, $i)); 
} 
0

попробовать этот

function reorder($arr, $item, $strict = null) { 
    $index = array_search($item, $arr, $strict); 

    if (false !== $index) { 
     $arr = array_merge(array_slice($arr, $index), array_splice($arr, 0, $index)); 
    } 

    return $arr; 
} 

$arr = array('A','B','C','D','E','F','G','H'); 

var_export($arr); 
$arr = reorder($arr, 'C'); 
var_export($arr); 

***** EDIT ***: решение илистый лучше чем у меня, с:

array_splice($arr, 0, 0, array_splice($arr, $index)); 
Смежные вопросы