2014-08-24 5 views
1

У меня есть массив. например:Сортировка массива - эти конкретные значения будут первыми

array("Apple", "Orange", "Banana", "Melon"); 

Я хочу сортировать массив, который первым будет «оранжевым», «дыня». и массив будет

array("Orange" , "Melon","Apple","Banana"); 

Я смотрел в функциях сортировки PHP, не нашел функцию сортировки s, чтобы сделать это.
Каков правильный способ сделать это.
спасибо

+0

Магазин '' orange' и Melon' в массиве TMP, затем вставляться в отсортированном один. –

ответ

1

Другим решением; используя пользовательскую функцию, чтобы переместить элемент в начало массива

function __unshift(&$array, $value){ 
    $key = array_search($value, $array); 
    if($key) unset($array[$key]); 
    array_unshift($array, $value); 
    return $array; 
} 

$a = array("Apple", "Orange", "Banana", "Melon"); 
__unshift($a, "Melon"); 
__unshift($a, "Orange"); 
print_r($a); 

Выход:

Array 
(
    [0] => Orange 
    [1] => Melon 
    [2] => Apple 
    [3] => Banana 
) 

Demo

Или вы можете использовать следующие реорганизовать массив, используя другой массив того переупорядоченной индекс

function __reorder(&$a, &$b){ 
    $c = array(); 
    foreach($b as $index){ 
     array_push($c, $a[$index]); 
    } 
    return $c; 
} 

// the original array 
$a = array("Apple", "Orange", "Banana", "Melon"); 
// an array with reordered index 
$b = array(1, 3, 0, 2); 
$c = __reorder($a, $b); 
print_r($c); 

Demo

+0

Это то, что я искал. отлично работает, спасибо – BenB

+0

@batz Я рад, что это помогло;) – hex494D49

+0

Я использовал его с циклом, потому что у меня больше двух первых значений и может быть одним из них или более не в массиве. я использовал с циклом becuse, у меня есть более 2 первых значений. : $ first_values ​​= массив («Дыня», «Оранжевый»); $ first_values_reversed = array_reverse ($ first_values); Еогеасп ($ first_values_reversed, как $ FIRST_VALUE) { \t, если (in_array ($ FIRST_VALUE, $ а)) { \t \t __unshift ($ а, $ FIRST_VALUE); \t} } – BenB

5

Что вы ищете является usort, вы можете указать пользовательскую функцию сортировки массива

пример:

function cmp($a, $b) 
{ 
    if ($a == "Orange") { 
     return 1; 
    } 
    if ($b == "Orange") { 
     return -1; 
    } 

    return strcmp($a, $b);// or any other sort you want 
} 

$arr = array("Apple", "Orange", "Banana", "Melon"); 

usort($arr, "cmp"); 
+2

В этом ответе отсутствует пример кода – hindmost

+0

Итак, как в обратном вызове 'usort' вы добавите' оранжевый' в качестве первого элемента? –

+0

см. Отредактированный ответ – Dima

-1

Мое решение

function mySort(array $data) 
{ 

    $top = array(); 
    $bottom = array(); 

    foreach ($data as $item) { 
     if (ord(strtoupper($item[0])) < 77 && ord(strtoupper($item[0])) > 64) { 
      array_push($top, $item); 
     } 

     if (ord(strtoupper($item[0])) > 76 && ord(strtoupper($item[0])) < 91) { 
      array_push($bottom, $item); 
     } 
    } 

    asort($top); 
    arsort($bottom); 

    return array_merge($bottom, $top);; 
} 

$arr = array("Apple", "Orange", "Banana", "Melon"); 

var_dump(mySort($arr)); 
0
$paths = array_merge(
    array_intersect(["Orange", "Melon"], ["Apple", "Orange", "Banana", "Melon"]), 
    array_diff(["Apple", "Orange", "Banana", "Melon"], ["Orange", "Melon"]) 
); 
+0

Пожалуйста, напишите, что делает этот код, чтобы OP мог понять, как он работает. –

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