2012-10-01 162 views
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()函数进行比较而不是字符串的最佳方法?

回答

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); 
} 
+1

很好看在文档示例中'echo min('hello',0); '会打印出“你好”,这是我不想要的。 http://php.net/manual/en/function.min.php –

+0

@ mk_89:好的。但你仍然没有说出你*想要的东西。 “我希望在搜索时不考虑非数字值”将是一个很好的答案。 – Jon

+0

“我希望在搜索时不会考虑非数字值” –

1

你可以这样做:

$newArr = array($array_a['price'], $array_b['price'], $array_c['price']); 
sort($newArr); 
$lowest = array_shift($newArr); 
+0

这将返回'严格的标准:只有变量应该通过引用传递' – Baba

+0

@Baba是的,有一个错误,它已经在我的答案中已经修复。 – Nelson

1

试试这个:

$keys = array_keys($your_array); 
asort($keys); 
$min = $keys[0]; 
echo "Smallest index: ".$min; 
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]; 

} 
?>