我有以下多维数组:
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
)
答案 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()
:
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);
这也是您的问题背景的示例