3

私はこの多次元配列を持っています:

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で受け取ることができますか?たとえば、サブアレイ数が最も多い最後の3つのサブアレイを取得する必要があります(DESC、3、2、2を意味します)。どうすればこれを達成できますか?

4

4 に答える 4

8

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

function cmp($a, $b){
    return (count($b) - count($a));
}
usort($array, 'cmp');
$highest_3_sub_arrays = array_slice($array, 0, 3);
于 2012-02-26T17:59:07.460 に答える
3

これはあなたが求めるものかもしれません:

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

値がすでに正しい場合は、実際の並べ替えを省略できます。

于 2012-02-26T17:58:02.677 に答える
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
于 2012-02-26T17:59:20.570 に答える
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要素サブ配列間など)、質問でそれを指定する必要があります。

于 2017-04-17T23:42:54.183 に答える