2

次の配列出力があります。

Array ( 
    [0] => SimpleXMLElement Object ( [0] => 32.4 km )
    [1] => SimpleXMLElement Object ( [0] => 10.2 km )
    [2] => SimpleXMLElement Object ( [0] => 205 km )
    [3] => SimpleXMLElement Object ( [0] => 50.8 km ) 
)

特定の住所からの最短距離を取得しようとしていますが、この結果から最短距離は 10.2 km です。すべての km の距離を比較して、最も小さい数値のものだけを表示するにはどうすればよいですか?

ここでの主な目標は、この配列の結果に基づいて最短距離を取得することです。

4

3 に答える 3

2

floatval()とを使用して配列から数値を抽出しarray_map()、を使用min()して配列内の最小値を見つけます。

echo min(array_map('floatval', $array));    

デモンストレーション:http ://codepad.org/LRNig19H

于 2013-01-25T02:27:33.673 に答える
1

最小の距離値を含む全体を再利用し、SimpleXMLElement距離を出力するだけでなく (オブジェクトには距離以外のデータが含まれていると仮定して)、必要に応じてこのスニペットを調整できます。

$lowest_item = NULL; 
$lowest_value = NULL;
// iterate over all SimpleXMLElements as a reference for later re-use
foreach ($array as &$item) {
    // extract number from string -- adjust $item[0] to the real object property
    $numeric_value = floatval($item[0]);
    // check if current item is lower than one of the previous
    if ($lowest_value == NULL || $lowest_value >= $numeric_value) {
        $lowest_item = $item;
        $lowest_value = $numeric_value;
    }
}
var_dump($lowest_item);
于 2013-01-25T02:19:58.410 に答える
1
$min_distance = $array[0][0];

foreach($array as $distance)
  $min_distance = (filter_var($distance[0], FILTER_SANITIZE_NUMBER_FLOAT) < filter_var($min_distance, FILTER_SANITIZE_NUMBER_INT)) ? $distance[0] : $min_distance;

echo $min_distance;

あなたの配列が何と呼ばれているのかわからないので、 を使用し$arrayました。お役に立てば幸いです。

私が使った方法について少し説明します。

foreach配列のすべての要素を通過します。現在のノードは、 の後に変数で保護されますas

filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT)文字列から数値を作成していますが、完全に数字から作成されたわけではありません。"23.5 km"に変換することを意味し23.5ます。

(boolean) ? value1 : value2短い if ステートメントです。booleanが true の場合、式は等しい、value1そうでない場合value2

それが役立つことを願っています。

于 2013-01-25T02:14:09.140 に答える