让我试着尽可能简单地解释一下。我有一个数组,其中包含几种产品的运费。
我有
的价值物品ID 本地送货 国际航运 附加本地送货 其他国际航运
为了更容易,我只需要知道如何计算本地运输的一部分。之后我可以将同样的公式应用到国际运输部分。
阵列可能包含1或5或100个产品,每个产品都有不同的(或相同的)数量,如下所示:
Array (
[0] => Array (
[item_id] => 788
[local_shipping] => 13.00
[intl_shipping] => 45.00
[addl_local_shipping] => 10.00
[addl_intl_shipping] => 20.00
)
[1] => Array (
[item_id] => 234
[local_shipping] => 23.00
[intl_shipping] => 5.00
[addl_local_shipping] => 1.00
[addl_intl_shipping] => 2.00
)
[2] => Array (
[item_id] => 543
[local_shipping] => 23.00
[intl_shipping] => 6.00
[addl_local_shipping] => 0.50
[addl_intl_shipping] => 5.00
)
)
所以,我想要得到的是包含HIGHEST local_shipping值的数组,在这种情况下,[1]和[2]都是" 23.00"。 / p>
如果只有一个唯一的最高值,我需要它返回" local_shipping"和#34; addl_local_shipping"像
Local Shipping is 23.00 and additional local shipping is 1.00
现在,如果有2个数组具有共同的最高值,我需要它返回一个最低的" addl_local_shipping"值,在这种情况下是[2],如:
Local Shipping is 23.00 and additional local shipping is 0.50
这有意义吗?
我能够获得最高的" local_shipping"数值超出数组:
$max = 0;
foreach( $my_array as $k => $v )
{
$max = max( array( $max, $v['local_shipping'] ) );
}
echo "Local Shipping is " . $max;
但我不知道如何弄清楚如何打印相关的" addl_local_shipping" string如果有多个具有相同高值的问题,请对问题进行排序。
答案 0 :(得分:2)
您可以使用usort
根据本地送货降序和其他升序对数组进行排序,然后从数组中的第1个结果中获取值:
usort($array, function($a, $b){
return $b['local_shipping'] - $a['local_shipping'] ?:
$a['addl_local_shipping'] - $b['addl_local_shipping'];
});
echo 'local shipping: ' . $array[0]['local_shipping'];
echo 'additional local shipping: ' . $array[0]['addl_local_shipping'];
但是,正如注释中所述,如果从sql查询中获取此数据,那么让数据库使用ORDER BY
子句为您完成工作更有意义。结果将是相同的 - 数组中的第一个元素将具有您需要的数据