Bir çok boyutlu dizi sıralama

3 Cevap php

Ben bu gibi bakabilirsiniz bir dizi sıralamak gerekiyor:

$array[4][0] = array('id' => 1, 'value' => 2);
$array[3][2] = array('id' => 0, 'value' => 3);
$array[4][1] = array('id' => 1, 'value' => 0);
$array[1][3] = array('id' => 2, 'value' => 1);
$array[1][1] = array('id' => 3, 'value' => 0);
$array[3][0] = array('id' => 2, 'value' => 1);
$array[3][1] = array('id' => 1, 'value' => 0);
$array[1][2] = array('id' => 3, 'value' => 2);
$array[1][0] = array('id' => 2, 'value' => 1);
$array[2][1] = array('id' => 0, 'value' => 2);
$array[2][4] = array('id' => 3, 'value' => 1);

Ama sıralanır ve bu şekilde iade edilmesi gerekir:

$array[1][0] = array('id' => 2, 'value' => 1);
$array[1][1] = array('id' => 3, 'value' => 0);
$array[1][2] = array('id' => 3, 'value' => 2);
$array[1][3] = array('id' => 2, 'value' => 1);
$array[2][1] = array('id' => 0, 'value' => 2);
$array[2][4] = array('id' => 3, 'value' => 1);
$array[3][0] = array('id' => 2, 'value' => 1);
$array[3][1] = array('id' => 1, 'value' => 0);
$array[3][2] = array('id' => 0, 'value' => 3);
$array[4][0] = array('id' => 1, 'value' => 2);
$array[4][1] = array('id' => 1, 'value' => 0);

Herkes bana yardımcı olabilir misiniz? Bu düşükten en yüksek endeks değerine dizinin iki dizin sıralamak gerekiyor. Yeterince basit geliyor, ama hala bozulmamış değerleri tutarken ben, bu anlamaya çalışıyorum zor zaman yaşıyorum.

Birine yardım edin ...

3 Cevap

Bir quick'n'dirty çözüm gibi görünebilir:

// Sort the outer array
ksort($array); 
// Sort each inner array
foreach($array as &$innerArray)
{
    ksort($innerArray);
}

Daha sonra, ve olmayan değerlere göre anahtarla göre sıralamak istiyorum: http://se.php.net/manual/en/function.ksort.php veya http://se.php.net/manual/en/function.uksort.php

Edit, Example;

function sorter(array &$multidimensional) {
    foreach ($multidimensional as &$current) {
        if (is_array($current))
            sorter($current);
    }
    ksort($multidimensional);
}

Böyle bir şey yapmak gerekir:

function ksort_recursive(&$arr) {
    foreach($arr as $key => &$value) {
        if(is_array($value)) {
            ksort_recursive($value);
        }
    } unset($value);
    ksort($arr);
}

ksort_recursive($array);