2013-02-11 4 views
0

я есть многомерным массив как это:Multisort в 3 двухмерного массива PHP

array(1) { 
    ["category_content"]=> 
    array(3) { 
    [0]=> 
    array(5) { 
     ["content_id"]=> 
     string(1) "2" 
     ["content_title"]=> 
     string(6) "coolas" 
     ["grade"]=> 
     string(1) "1" 
     ["content_order"]=> 
     string(1) "1" 
     ["kind"]=> 
     string(7) "article" 
    } 
    [1]=> 
    array(5) { 
     ["content_id"]=> 
     string(1) "1" 
     ["content_title"]=> 
     string(16) "Zango Restaurant" 
     ["grade"]=> 
     string(1) "2" 
     ["content_order"]=> 
     string(1) "2" 
     ["kind"]=> 
     string(8) "business" 
    } 
    } 
} 

я хочу отсортировать по content_order. Как я могу отсортировать этот массив, используя multisort? и как я могу предоставить флаг для сортировки? спасибо заранее: D

ответ

2
$category_content_array = $data_array; // your actual data array 
$content_order_array = array(); // new array as a column to sort collector 

foreach ($category_content_array as $content) { 
$content_order_array[] = $content['content_order']; 
} 

array_multisort($content_order_array, SORT_ASC, $category_content_array); 
1

Это поможет вам решить проблему.

<?php 
function CustomSort (&$array, $key) 
{ 
    $sorter=array(); 
    $ret=array(); 

    reset($array); 

    foreach ($array as $ii => $va) 
    { 
     $sorter[$ii]=$va[$key]; 
    } 

    asort($sorter); 

    foreach ($sorter as $ii => $va) 
    { 
     $ret[$ii]=$array[$ii]; 
    } 

    $array=$ret; 
} 

CustomSort($your_array,"content_id"); 

?>

Другой

$contentID = array(); 
foreach ($your_array as $key => $row) 
{ 
    $contentID[$key] = $row['content_id']; 
} 
array_multisort($contentID, SORT_DESC, $your_array);
1

http://www.php.net/manual/en/function.array-multisort.php

пример # 3,

<?php 
$data[] = array('volume' => 67, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 1); 
$data[] = array('volume' => 85, 'edition' => 6); 
$data[] = array('volume' => 98, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 6); 
$data[] = array('volume' => 67, 'edition' => 7); 

foreach ($data as $key => $row) { 
    $volume[$key] = $row['volume']; 
    $edition[$key] = $row['edition']; 
} 

// Sort the data with volume descending, edition ascending 
// Add $data as the last parameter, to sort by the common key 
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
?> 
+0

Я не писал на PHP, но это выглядит очень просто –

0

Вы также можете использовать usort(). НАПРИМЕР,

<?php 
$array = array (
    '1' => array('sortBy' => 10), 
    '2' => array('sortBy' => 4), 
    '3' => array('sortBy' => 50), 
    '4' => array('sortBy' => 8), 
    '5' => array('sortBy' => 2), 
    '6' => array('sortBy' => 100), 
); 

function comp($a, $b) { 
    return $a['sortBy'] > $b['sortBy']; 
} 

usort($array, comp); 
?> 
Смежные вопросы