Сортировка многомерного массива по значениям - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть следующий массив.

Array  (
        [0] => Array(
              [vendorid] => 36
              [vendorname] => Nothin' But A Muffin
              [vendorfriendlyname] => nothin-but-a-muffin
          )
        [1] => Array(
              [vendorid] => 52
              [vendorname] => Montalto Olive Grove
              [vendorfriendlyname] => montalto-olive-grove
          )
        [2] => Array(
              [vendorid] => 44
              [vendorname] => Kuki Kids
              [vendorfriendlyname] => kuki-kids
          )
        [3] => Array(
              [vendorid] => 47
              [vendorname] => pasApas
              [vendorfriendlyname] => pasapas
          )
        [4] => Array(
              [vendorid] => 89
              [vendorname] => Organic Family
              [vendorfriendlyname] => organic-family
          )
    )

Мне нужно преобразовать вышеуказанный массив в следующий

Array  (
        [0] => Array(
              [vendorid] => 44
              [vendorname] => Kuki Kids
              [vendorfriendlyname] => kuki-kids
          )
        [1] => Array(
              [vendorid] => 52
              [vendorname] => Montalto Olive Grove
              [vendorfriendlyname] => montalto-olive-grove
          )
        [2] => Array(
              [vendorid] => 36
              [vendorname] => Nothin' But A Muffin
              [vendorfriendlyname] => nothin-but-a-muffin
          )
        [3] => Array(
              [vendorid] => 89
              [vendorname] => Organic Family
              [vendorfriendlyname] => organic-family
          )
        [4] => Array(
              [vendorid] => 47
              [vendorname] => pasApas
              [vendorfriendlyname] => pasapas
          )

    )

Я использовал array_multisort (), но он не работал

Можно ли отсортировать?

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

usort как:

    function compare($a, $b)
    {           
        return strcmp($a['vendorname'], $b['vendorname']);
    }
    usort($array, "compare");
0 голосов
/ 24 февраля 2011

Хотя, как отмечено в комментарии, наиболее эффективный метод в этом случае - это сортировка в запросе к базе данных, вот пример того, как вы сделаете это с array_multisort, что намного эффективнее, чем usort:

$rows = $vendors = array();
while ($row = mysql_fetch_assoc($res)) {
    $vendors[] = $row['vendorname'];
    $rows[] = $row;
}
array_multisort($rows, $vendors, SORT_ASC);
0 голосов
/ 24 февраля 2011

Попробуйте это: при условии, что у вас есть массив в $ строках

function cmp($a, $b)
{
    return strcmp($a["vendorname"], $b["vendorname"]);
}

$array = $rows; 
usort($array, "cmp");

while (list($key, $value) = each($array)) {
    $new[] =$value ;
}
echo "<pre>";
print_r($new);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...