如何获取多维数组的高值

时间:2016-03-12 21:55:27

标签: php

我有以下多维数组:

array(
    array(
        [id] => 65,
        [user_id] => 1,
        [total] => 1
    ),
    array(
        [id] => 66,
        [user_id] => 3,
        [total] => 2
    ),
    array(
        [id] => 67,
        [user_id] => 5,
        [total] => 4
    ),
)

如何获得总数最高的数组,我仍然可以得到数组的完整键值:

array(
    [id] => 67,
    [user_id] => 5,
    [total] => 4
)

5 个答案:

答案 0 :(得分:0)

试试这个:

$total = array();
foreach ($data as $key => $row) {
    $total[$key]  = $row['total'];
}

// this sorts your $data array by `total` in descending order
// so the max for `total` is the first element
array_multisort($total, SORT_DESC, $data);

现在,使用$data[0];

答案 1 :(得分:0)

使用usort()

在id上对数组进行排序
function cmp($a, $b)
{
    return strcmp($b["id"], $a["id"]);
}
usort($arr, 'cmp'); // $arr is your array

然后第一个数组具有您想要的值。

有关详细信息,请参阅有关usort的文档:http://php.net/manual/en/function.usort.php

答案 2 :(得分:0)

$array = [
    ['id' => 1, 'total' => 1],
    ['id' => 2, 'total' => 4],
    ['id' => 3, 'total' => 5],
];

function cmp($a, $b) {
    return ($a['total'] < $b['total']) ? 1 : -1;
}

usort($array, 'cmp');

print_r($array[0]); // output ['id' => 3, 'total' => 5]

答案 3 :(得分:0)

您可以将array_column()array_search()

一起使用
$totals = array_column( $array, 'total' );
$result = $array[ array_search( max( $totals ), $totals ) ];

array_column()返回一个总数为&#39;的数组。值。用它来检索具有最大总值的主数组的键。

但是......跟随数组怎么样?

$array = array(
    array(
        'id' => 65,
        'user_id' => 1,
        'total' => 4
    ),
    array(
        'id' => 66,
        'user_id' => 3,
        'total' => 2
    ),
    array(
        'id' => 67,
        'user_id' => 5,
        'total' => 4
    ),
    array(
        'id' => 68,
        'user_id' => 6,
        'total' => 2
    )
);

要过滤所有最大值,您可以使用:

$max = max( array_column( $array, 'total' ) );
$result = array_filter
(
    $array,
    function( $row ) use ( $max )
    {
        return $row['total'] == $max;
    }
);
print_r( $result );

输出:

Array
(
    [0] => Array
        (
            [id] => 65
            [user_id] => 1
            [total] => 4
        )

    [2] => Array
        (
            [id] => 67
            [user_id] => 5
            [total] => 4
        )

)

输入$max变量最大值&#39; total&#39;列,然后使用它来过滤原始数组并检索具有总数的所有行。

答案 4 :(得分:-2)

您可以为var_dump安装xdebug

看你的阵列
var_dump($array);

之后你可以按键获取数组

$array[3]; //example for question context

或通过foreach获取数组分析

$arrayResult = array();
foreach($array as $_arr) {
   if($_arr['user_id'] == 5) {
      $arrayResult = $_arr;
   }
}
var_dump($arrayResult);

这也是您的问题背景的示例