从关联数组中获取最高值,如果相等,则使用最低的其他值获得最高值

时间:2015-01-21 14:50:20

标签: php arrays

让我试着尽可能简单地解释一下。我有一个数组,其中包含几种产品的运费。

我有

的价值

物品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如果有多个具有相同高值的问题,请对问题进行排序。

1 个答案:

答案 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子句为您完成工作更有意义。结果将是相同的 - 数组中的第一个元素将具有您需要的数据