我需要获得多维数组中的最大值或最大值。
这是我的数组$array
:
[pay] => Array
(
[0] => Array
(
[title] => Array
(
[name] => 'hi'
)
[payment] => Array
(
[amount] => 35
[currency] => USD
)
)
[1] => Array
(
[title] => Array
(
[name] => 'lol'
)
[payment] => Array
(
[amount] => 50
[currency] => USD
)
)
[2] => Array
(
[title] => Array
(
[name] => 'ok'
)
[payment] => Array
(
[amount] => 30
[currency] => USD
)
)
)
我需要获得amount
的最大值50,我该怎么做?
这是我尝试过的但它不起作用:
$max = -9999999; //will hold max val
$found_item = null; //will hold item with max val;
foreach($array as $k=>$v)
{
if($v['Total']>$max)
{
$max = $v['Total'];
$found_item = $v;
}
}
答案 0 :(得分:3)
简单就像这个单线。获取payment
列数据,然后从生成的数组中提取amount
数据,然后获取最大值。做完了。 (对不起,我花了这么长时间 - 我不得不将你发布的数组转换为可用的php数组。)
输入:
$array=["pay" => [
["title"=>["name"=>'hi'],"payment"=>["amount"=>35,"currency"=>"USD"]],
["title"=>["name"=>'lol'],"payment"=>["amount"=>50,"currency"=>"USD"]],
["title"=>["name"=>'ok'],"payment"=>["amount"=>30,"currency"=>"USD"]]
]
];
方法#1(Demo):
echo max(array_column(array_column($array["pay"],"payment"),"amount"));
方法#2(Demo):
$max=0;
foreach($array["pay"] as $subarray){
if($max<$subarray["payment"]["amount"]){
$max=$subarray["payment"]["amount"];
}
}
echo $max;
方法#3(Demo):
$payments=array_column($array["pay"],"payment"); // declare payments array
rsort($payments); // sort by amount DESC
echo $payments[0]["amount"]; // access the first amount value
输出:
50
方法#1的好处是:代码简洁,没有条件语句,没有全局变量声明/覆盖,只是直接到最大值。什么不爱!
如果方法#1太可怕了,你可以使用我的方法#2(首先由aendeerei发布)。我不喜欢它,因为它需要额外的步骤来初始化$ max变量,对每次迭代执行条件检查,并在适当时覆盖$max
变量。 foreach循环的实际性能取决于数组的大小,但这两种方法之间的差异对人类来说是不可察觉的。
方法3可能是我的新宠,因为在完全通过键访问之前没有条件和两个函数。但是,它确实需要声明输入数组的部分副本,必须对其进行排序。无论如何,接受你的选择 - 这是完全相同的结果。
答案 1 :(得分:1)
试试这个希望这会有所帮助。在这里,我们只是使用简单的foreach
来完成它。
解决方案1:
$max=0;
foreach($yourArray["pay"] as $value)
{
if($max<$value["payment"]["amount"])
{
$max=$value["payment"]["amount"];
}
}
echo $max;
解决方案2:
仅出于测试目的,我已将您array
转换为json
。在这里,我们使用array_column
两次来获取列
$internals=array_column($yourArray["pay"],"payment");//retrieving payments
$amounts=array_column($internals, "amount");//retrieving amounts
arsort($amounts);
print_r(array_values($amounts)[0]);
答案 2 :(得分:1)
使用Usort并获得第一个索引
$arr= array
(
array
(
'payment' => array
(
'amount' => 35,
'currency' => 'USD'
)
),
array
(
'payment' => array
(
'amount' => 50,
'currency' => 'USD'
)
),
array
(
'payment' => array
(
'amount' => 80,
'currency' => 'USD'
)
)
);
function sortAmount($x, $y) {
return $y['payment']['amount'] - $x['payment']['amount'];
}
usort($arr, 'sortAmount');
echo "<pre>";
$highest=$arr[0];
print_r($highest)
//for value only
$highest=$arr[0]['payment']['amount'];
答案 3 :(得分:1)
$max = 0;
foreach ($array['pay'] as $key => $item) {
$amount = $item['payment']['amount'];
if ($amount > $max) {
$max = $amount;
}
}
echo $max;
答案 4 :(得分:1)
简写:
$result = array_reduce($array['pay'], function($a, $b){
return $a ? ($a['payment']['amount'] > $b['payment']['amount'] ? $a : $b) : $b;
});
var_dump($result['payment']['amount']);
答案 5 :(得分:0)
使用名为pay的数组来考虑此示例。您可以将此方法用于您自己的阵列。此代码适用于n个元素的数组。在这里,我将3视为名为$ pay的数组中的元素数。您可以在3的位置替换数组中的最大元素,以控制循环控制变量&#39; i&#39;。
$big=$pay[0];
for($i=1; $i<3; $i++){
if($pay[i]>$big)
$big=$pay[i];
}
echo $big;
我希望这就是你要找的东西。要求任何澄清。