0

我正在尝试比较 3 个不同的数组价格以找到最低的,以便我可以决定哪些数组值应该输入到数据库中,代码现在看起来像这样......

$array_a = array(
   "id"    => 398,
   "price" => 100 
);

$array_b = array(
   "id"    => 387,
   "price" => 60
);

$array_c = array(
   "id"    => 127,
   "price" => 50
);

if($array_a && $array_b && $array_c){
   $newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
   array_keys($newArr, min($newArr));
   print_r($newArr)."\n"; 
}

上面的代码没有返回具有最低价格的数组的正确索引,在这种情况下为 2 (array_c),找出最低值的键的正确方法是什么。

还有什么是确保只有数字与 min() 函数而不是字符串进行比较的最佳方法?

4

4 回答 4

1

例如,您可以以这种方式自动化它:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
asort($newArr, SORT_NUMERIC);
echo "Minimum: ".reset($newArr).", given in array #".key($newArr);

我不太确定如何回答您的最后一个问题——如果这些值实际上没有输入为数字,会发生什么?

更新:这是排除非数字值的一种方法:

asort($newArr, SORT_NUMERIC);
while (!is_numeric(current($newArr))) next($newArr);
if (key($newArr) === null) {
    echo "No valid elements found";
}
else {
    echo "Minimum: ".current($newArr).", given in array #".key($newArr);
}
于 2012-10-01T13:12:20.307 回答
1

你可以做:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
sort($newArr);
$lowest = array_shift($newArr);
于 2012-10-01T13:14:16.500 回答
1

试试这个:

$keys = array_keys($your_array);
asort($keys);
$min = $keys[0];
echo "Smallest index: ".$min;
于 2012-10-01T13:19:06.610 回答
1
<?php
$array_a = array(
   "id"    => 398,
   "price" => 100 
);

$array_b = array(
   "id"    => 387,
   "price" => 60
);

$array_c = array(
   "id"    => 127,
   "price" => 50
);

if($array_a && $array_b && $array_c){
   $newArr = array($array_a['price'], $array_b['price'], $array_c['price']);
   $key_min = array_keys($newArr, min($newArr));
   echo $key_min[0];

}
?>
于 2012-10-01T13:19:53.583 回答