Сортировать массив по значению ключа - PullRequest
1 голос
/ 18 марта 2012

Итак, у меня есть этот массив.

Array
(
    [0] => Array
        (
            [key_1] => something
            [type] => first_type
        )

    [1] => Array
        (
           [key_1] => something_else
           [type] => first_type
        )

    [2] => Array
        (
            [key_1] => something_else_3
            [type] => second_type
        )

    [3] => Array
        (
            [key_1] => something_else_4
            [type] => second_type
        )
)

Я должен отсортировать по значению типа в шаблоне, как это:

first_type
second_type
first_type
second_type

Мои вопросы, как я могу это сделать?

Большое спасибо!

Ответы [ 3 ]

6 голосов
/ 18 марта 2012

Вам необходимо использовать usort с настраиваемой функцией сравнения, которая сравнивает подключи key_1 каждого элемента (вы можете использовать strcmp, чтобы сделать это удобно).Если вы не хотите изменять структуру результирующего массива, это будет выглядеть примерно так:

$arr = /* your array */
usort($arr, function($a, $b) { return strcmp($a['key_1'], $b['key_1']); });
0 голосов
/ 20 марта 2012

Итак, вот как я заставил это работать:

function filter_by_value($array, $index, $value) { 
    if(is_array($array) && count($array) > 0)  { 
        foreach(array_keys($array) as $key){ 
            $temp[$key] = $array[$key][$index]; 
            if ($temp[$key] == $value){ 
                $newarray[$key] = $array[$key]; 
            } 
        } 
    } 
    return $newarray;
}
$array = /* array here */ 
$type1 = array_values(filter_by_value($array, 'type', '1'));
$type2 = array_values(filter_by_value($array, 'type', '2'));
$i = 1; $x = 1; $y = 1;
$sorted = array();
foreach ($array as $a) {
    if ($i % 2) {
        $sorted[$i-1] = $type1[$x-1];
        $x++;
    } else {
        $sorted[$i-1] = $type2[$y-1];
        $y++;
    }
    $i++;
}

Найден filter_by_value () на php.net, но я не помню, где это так, это не сделано мной. Возможно, это не лучшее решение, но оно работает довольно хорошо.

0 голосов
/ 18 марта 2012

Если sort() и его соответствующие альтернативы не работают, вам придется использовать usort() или uasort() с пользовательской функцией для сортировки этого массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...