2013-12-13 68 views
0

我有一個數組有3個值(56.767,360.997,579.728)。這些是在一個數組($距離)。那麼,當我運行min($ distance)時,我會得到'360.997'。是什麼賦予了?PHP分鐘不能正常工作

<?php 

include('mysql_connect.php'); 

$MasterState = 'CA'; 

$query = 'select * from estes_term where Dest_State = "'.$MasterState.'"'; 
$result = mysql_query($query); 

if($result) { 
    $row = @mysqli_fetch_row($result); 
} 

$Term_Zip = array(); 
$Distance = array(); 
$i = '0'; 
while ($row = mysql_fetch_array($result, MYSQLI_ASSOC)) { 
    $Term_Zip[] = $row['Term_Zip']; 
    $Distance_xml = file_get_contents('http://zipcodedistanceapi.redline13.com/rest/ua6z0ep0djB3zHGz5Z40hONMVc8yuXgY8nx8BX8OhKSRrzqxzvyRjmDeyMM3J32S/distance.xml/90077/'.$Term_Zip[$i].'/mile'); 
    $Distance[] = $Distance_xml; 
    $i++; 
} 

echo '<pre>'; 
var_dump($Term_Zip); 
var_dump($Distance).'<br />'; 
$test1 = min($Distance); 
$test = (array_keys($Distance, min($Distance))); 

echo '<br />'; 
echo 'Min'.min($Distance); 

?> 
+4

您的值可能爲字符串,而不是數字存儲。 –

+0

你在那裏有一個var_dump,它的輸出是什麼?我懷疑是你存儲的字符串將按照字母數字值而不是數字值進行排序。 – GordonM

+0

它們是以數字還是以字符串形式存儲的?找出與var_dump,我猜字符串,在這種情況下,結果是正確的。 – Maerlyn

回答

0

做這樣的......我們使用array_map將所有的數組元素float,然後找到從它min值。

<?php 
$arr= array(56.767, 360.997, 579.728); 
echo min(array_map('floatval',$arr)); 

OUTPUT:

56.767 

編輯:

拿到鑰匙,你可以利用array_search()

$key = array_search(min(array_map('floatval',$arr)), $arr); 
+0

我真的需要最低號碼的鑰匙,所以我可以再次參考它來獲取郵政編碼。 –

+0

@ smack-a-bro,請檢查編輯。 –

2

正如@Rocket指出的那樣,你的變量存儲爲字符串,而不是浮點數。這個字符「3」小於「5」,所以它是第一個。爲了避免這種使用Type Jugglingfloatval()在你的代碼,以確保您的增值經銷商的持股量:

$Distance[] = floatval(trim($Distance_xml)); 
+0

當我這樣做時,我得到所有值爲'0'。 –

+0

請注意'_xml'對於「float」數據類型肯定是一個非常糟糕的變量名(雖然它*可能是正確的,但是寫下這條線讓我感到害怕)。 –

+0

@ smack-a-bro,現在試試 –