2014-02-26 201 views
0

我想以特定的方式排序多维数组。PHP排序多维数组

我有一个这样的数组:用于特定[COL]

Array (
[551691] => Array (
    [19129287] => Array (
    [value] => cccccc 
    [id] => 19129287 
    [col] => 1 
    ) 
    [19129288] => Array (
    [value] => bbbbb 
    [id] => 19129288 
    [col] => 2 
    ) 
) 

[550141] => Array (
    [19071703] => Array (
    [value] => aaaaa 
    [id] => 19071703 
    [col] => 1 
    ) 
    [19071706] => Array (
    [value] => ccccc 
    [id] => 19071706 
    [col] => 2 
    ) 
) 

[550139] => Array (
    [19071675] => Array (
    [value] => bbbbb 
    [id] => 19071675 
    [col] => 1 
    ) 
    [19071676] => Array (
    [value] => ddddd 
    [id] => 19071676 
    [col] => 2 
    ) 
) 
) 

我想的排序此阵列由[值]

对于为例对[COL]已经值1:

带有键550141的第一级阵列应移动到第一个位置,因为[col] => 1的数组值为“aaaaa”

Array (

[550141] => Array (// <= Moved at first position "value" for col 1 is aaaa 
    [19071703] => Array (
    [value] => aaaaa 
    [id] => 19071703 
    [col] => 1 
    ) 
    [19071706] => Array (
    [value] => ccccc 
    [id] => 19071706 
    [col] => 2 
    ) 
) 

[550139] => Array (// <= Moved at second position 
    [19071675] => Array (
    [value] => bbbbb 
    [id] => 19071675 
    [col] => 1 
    ) 
    [19071676] => Array (
    [value] => ddddd 
    [id] => 19071676 
    [col] => 2 
    ) 
) 

[551691] => Array (
    [19129287] => Array (
    [value] => cccccc 
    [id] => 19129287 
    [col] => 1 
    ) 
    [19129288] => Array (
    [value] => bbbbb 
    [id] => 19129288 
    [col] => 2 
    ) 
) 
) 

如果有人有一个好主意.. :-)

感谢

回答

0

最终我找到了解决方案。我不知道是否是最好的方法,但它的工作:

$sortarray = array(); 

foreach ($datas as $datas_key => $s) { 
    foreach ($s as $itemId => $item) { 
     if ($item['col'] == 2) { 
      $sortarray[] = array(
       'sid' => $datas_key, 
       'value' => $item['value'] 
      ); 
     } 
    } 
} 

usort($sortarray, function($a,$b) { 
    return ($a['value']<$b['value'])?-1:1; 
}); 

$datas_sorted = array(); 
foreach ($sortarray as $new_sort) { 
    $datas_sorted[$new_sort['sid']] = $datas[$new_sort['sid']]; 
} 
0

您可以编写使用http://php.net/usort

你可能会需要像

usort($array, function($a,$b) { 
    return ($a['value']<$b['value'])?1:-1; 
}); 

很显然,你自己的排序功能需要对其进行调整以适合您的情况,并且可能将其放到{}循环中,因为您实际上正在对子数组进行排序。

+0

感谢您的回应。我已经试过这个,但它只排列最后一个级别的阵列。 – mdespeuilles

+0

那么这个回应只是让你指出正确方向的线索。完整的解决方案比这更复杂一点,但尝试自己查看它并不是一个挑战吗?提示:它是foreach(){},array_keys()和usort()的组合。 –

+0

感谢您的帮助,我编辑了一个aswer – mdespeuilles