简体   繁体   English

PHP多维数组排序和修剪

[英]PHP Multidimensional Array Sort & Trim

I have the array below. 我有下面的数组。 I do not know how I can sort secondary array so elements with highest value gets to be first and I want to trim if the array length is more than 20 elements. 我不知道如何对辅助数组进行排序,因此具有最高值的元素将排在首位,并且如果数组长度超过20个元素,我想进行修剪。 I want first dimension to be sorted by alphabetical, secondary dimension to be sorted by values and if there are more than 20 entries, I want only first 20 highest value. 我希望第一维按字母顺序排序,第二维按值排序,如果有20个以上的条目,我只希望前20个最高值。

(
    [a] => Array
        (
            [option1] => 2
            [option2] => 3
            [option3] => 1
            [option4] => 7
            [option5] => 8
            [option6] => 3
            [option7] => 2
            [option8] => 32
            [option9] => 35
            [option10] => 33
            [option11] => 32
            [option12] => 35
            [option13] => 37
            [option14] => 3
            [option15] => 39
            [option16] => 4
            [option17] => 36
            [option18] => 31
            [option19] => 12
            [option20] => 35
            [option21] => 3
            [option22] => 32
            [option23] => 31
        )

    [b] => Array
        (
            [option16] => 4
            [option17] => 36
            [option18] => 31
            [option19] => 12

)

Php has everything for you! PHP为您准备了一切!

<?php

$array = array(
    'b' => array(
        'option1' => 33,
        'option2' => 12,
        'option3' => 17,
        'option4' => 44,
        'option5' => 543,
        'option6' => 56,
        'option7' => 8,
        'option8' => 0,
        'option9' => -10,
        'option10' => 234,
        'option11' => 67,
        'option12' => 99,
        'option13' => 3363,
        'option14' => 912,
        'option15' => 51,
        'option16' => 42,
        'option17' => 105,
        'option18' => 80,
        'option19' => 44,
        'option20' => 0,
        'option21' => 15,
    ),
    'a' => array(
        'option1' => 88,
        'option2' => 0,
        'option3' => -23,
        'option4' => 16,
        'option5' => 76,
    ),
);

// sorts array keys alphabetically
ksort($array, SORT_NATURAL);
// iterrate each key (a or b etc.) => value (value is assoc array of options) pair
foreach ($array as $k => &$v) {
    // reverse sort (from max to min) options by its value
    // with preserve keys
    arsort($v);
    // cut options array to max 20 element
    $v = array_slice($v, 0, 20);
}

echo '<pre>' . print_r($array, 1) . '</pre>';

Online runnable . 在线运行

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM