2012-02-26 5 views
2

によって多次元配列は、私は、この多次元配列を持っている:私はサブアレイをカウントするとソートそのサブアレイのサイズ

Array 
(
    [0] => Array 
     (
     [0] => 2012-02-26 07:15:00 
     ) 
    [1] => Array 
     (
      [0] => 2012-02-26 17:45:00 
      [1] => 2012-02-26 18:55:00 
     ) 
    [2] => Array 
     (
      [0] => 2012-02-26 18:55:00 
      [1] => 2012-02-26 17:45:00 
     ) 
    [3] => Array 
     (
      [0] => 2012-02-26 18:57:00 
      [1] => 2012-02-26 17:45:00 
      [2] => 2012-02-26 18:55:00 
     ) 

私は、これは1,2,2,3得ます。 3,2,2,1でどのように受け取ることができますか?私は最高のサブアレイ数(DESC、それは3,2,2を意味する)で最後の3つのサブアレイを取得する必要があります。どうすればこれを達成できますか?

+0

関連するセクションに多くの重複があります。 - > –

答えて

6

usort機能を利用すると実現できます。

function cmp($a, $b){ 
    return (count($b) - count($a)); 
} 
usort($array, 'cmp'); 
$highest_3_sub_arrays = array_slice($array, 0, 3); 
+0

優れたソリューションをありがとう! – peter

3

これは、あなたが求めるものを次のようになります。

natsort($sub_count); 
$rev = array_reverse($sub_count); 
$result = array_pad($rev, 3); 

あなたが持っている値が順番に既にある場合は、実際のソートを省略する場合があります。

+0

とても素敵で簡単な解決策です! –

1
$sizes=array(); 
foreach ($myarray as $k=>$v) 
    if (!is_array($v)) $sizes["$k"]=0; 
    else $sizes["$k"]=sizeof($v); 

sort($sizes); 


echo array_pop($sizes); //outputs 3 
echo array_pop($sizes); //outputs 2 
echo array_pop($sizes); //outputs 2 
+0

ありがとう、それも動作します。 echoの名前を次のように変更してください: print_r(array_pop($ sizes)); //出力3 print_r(array_pop($ sizes)); //出力2 print_r(array_pop($ sizes)); // 2を出力する – peter

0

他の回答のすべてが働きすぎているように私には思えます。 usort()count()、およびforeach()は必要ありません。natsort()を試したとき、それは私に<b>Notice</b>: Array to string conversion in <b>[...][...]</b>を与えました。

rsort()は、最も長いサブアレイを最初に配置します。

コード:

$array=array(
    ["2012-02-26 18:55:00","2012-02-26 17:45:00"], 
    ["2012-02-26 07:15:00"], 
    ["2012-02-26 18:57:00","2012-02-26 17:45:00","2012-02-26 18:55:00"], 
    ["2012-02-26 17:45:00","2012-02-26 18:55:00"] 
); 

$size=3; // modify this line to declare how many subarrays to capture 
rsort($array); // sort the subarrays in DESC order 
var_export(array_slice($array,0,$size)); // print the first n subarrays 

出力:

array (
    0 => 
    array (
    0 => '2012-02-26 18:57:00', 
    1 => '2012-02-26 17:45:00', 
    2 => '2012-02-26 18:55:00', 
), 
    1 => 
    array (
    0 => '2012-02-26 18:55:00', 
    1 => '2012-02-26 17:45:00', 
), 
    2 => 
    array (
    0 => '2012-02-26 17:45:00', 
    1 => '2012-02-26 18:55:00', 
), 
) 

あなたは(あなたの2つの2要素のサブアレイの間のような)の長さ、絆を壊すためにいくつかの追加のソートを実装する場合は、必要になりますあなたの質問でそれを指定する必要があります。

関連する問題