2012-10-01 207 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]; 

} 
?>