usort関数の結果が間違っています

ビラル・アーメド

今日、私はこの質問の答えを提供し、スクリプトを書きましたが、何かがうまくいかなかったことがわかりました。

これが最初のスクリプトです

<?php 
$array = array( 
            "0" => array (
               "id" => 1204,
               "custom_price" => 33.1500    
            ),
            
            "1" => array (
               "id" => 1199,
               "custom_price" => 15.83  
            ),
            
            "2" => array (
               "id" => 1176,
               "custom_price" => 16.83  
            )
         );

usort($array, function($a, $b) {
    return $a['custom_price'] - $b['custom_price'];
});
echo "<pre>";
print_r($array);

その出力は(サンドボックスで出力を確認することもできます

<pre>Array
(
    [0] => Array
        (
            [id] => 1176
            [custom_price] => 16.83
        )

    [1] => Array
        (
            [id] => 1199
            [custom_price] => 15.83
        )

    [2] => Array
        (
            [id] => 1204
            [custom_price] => 33.15
        )

)

したがって、希望する出力は(custom_price 15.83, 16.83, 33.15000)のようになりますが、実際の出力は(custom_price 16.83,15.83,33.15000)です。15.83が16.83から最小であることがわかります。ソート結果が間違っている

したがって、custom_price 15.83を14.83に変更すると、出力の並べ替えは正しくなります

<pre>Array
(
    [0] => Array
        (
            [id] => 1199
            [custom_price] => 14.83
        )

    [1] => Array
        (
            [id] => 1176
            [custom_price] => 16.83
        )

    [2] => Array
        (
            [id] => 1204
            [custom_price] => 33.15
        )

)

あなたはサンドボックスで出力を見ることができます

何が起こっているのか理解できません。これについて何か考えはありますか?

私の質問は次のとおりです。各反復をチェックしますが、問題を特定できません。custom_priceが15.83の場合、結果は間違っています。どうして?

ナイジェルレン

usort()比較関数からの戻り値に関する警告がPHPマニュアルにあります(http://php.net/manual/en/function.usort.php#refsect1-function.usort-parameters)...

注意floatなどの比較関数から非整数値を返すと、コールバックの戻り値の整数への内部キャストが発生します。したがって、0.99や0.1などの値は両方とも0の整数値にキャストされ、等しい値として比較されます。

また、PHP 7から<=>、2つの値の比較に応じて1、0、-1を返す宇宙船演算子使用できます。

usort($array, function($a, $b) {
    return $a['custom_price'] <=> $b['custom_price'];
});

echo "<pre>";
print_r($array);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

eulerProjectの関数の結果が間違っています

分類Dev

setIntervalによる関数の結果が間違っています

分類Dev

WindowsのJulia(0.6.2)から呼び出されたFortran関数の結果が間違っています

分類Dev

MySQLの結合が間違っています結果

分類Dev

Pythonを使用したGoogleScrapeの結果の数が間違っています

分類Dev

phpでxpathを使用すると、結果の数が間違っています

分類Dev

MDX結果の合計が間違っています

分類Dev

ElasticSearch結果のスコアが間違っています

分類Dev

dimplejs散布図の結果が間違っています

分類Dev

Application.Sumの結果が間違っています

分類Dev

NSDateFormatter dateFromStringの結果が間違っていますか?

分類Dev

!dumpheapの結果が間違っています

分類Dev

Python math.arctan()の結果が間違っていますか?

分類Dev

Scalaではn個の数値の合計の結果が間違っています

分類Dev

Visual BasicのForループの結果、ループの数が間違っています

分類Dev

Valgrindを使用したlongdoubleのstd :: fpclassifyの結果が間違っています

分類Dev

Haskell repa:2つの配列の内積結果が間違っています

分類Dev

PHPのarray_count_valuesの結果が間違っています

分類Dev

関数の型宣言が間違っています

分類Dev

main関数の戻り値が間違っていますか?

分類Dev

PythonCaesar関数の出力が間違っています

分類Dev

vhdlの関数が間違っています

分類Dev

ATOM関数の戻り値が間違っています

分類Dev

ElasticsearchMatchQueryが間違った結果を返しています

分類Dev

Objective-Cでは、fabsf()の結果タイプが間違っています

分類Dev

Conv2dTensorflowの結果が間違っています-精度= 0.0000e + 00

分類Dev

タイムデルタ操作の結果が間違っています

分類Dev

hash_djb2 PHPの結果が間違っていますか?

分類Dev

Oracleの "order by"句は、結果を間違った順序で返すか、結果が欠落しています

Related 関連記事

  1. 1

    eulerProjectの関数の結果が間違っています

  2. 2

    setIntervalによる関数の結果が間違っています

  3. 3

    WindowsのJulia(0.6.2)から呼び出されたFortran関数の結果が間違っています

  4. 4

    MySQLの結合が間違っています結果

  5. 5

    Pythonを使用したGoogleScrapeの結果の数が間違っています

  6. 6

    phpでxpathを使用すると、結果の数が間違っています

  7. 7

    MDX結果の合計が間違っています

  8. 8

    ElasticSearch結果のスコアが間違っています

  9. 9

    dimplejs散布図の結果が間違っています

  10. 10

    Application.Sumの結果が間違っています

  11. 11

    NSDateFormatter dateFromStringの結果が間違っていますか?

  12. 12

    !dumpheapの結果が間違っています

  13. 13

    Python math.arctan()の結果が間違っていますか?

  14. 14

    Scalaではn個の数値の合計の結果が間違っています

  15. 15

    Visual BasicのForループの結果、ループの数が間違っています

  16. 16

    Valgrindを使用したlongdoubleのstd :: fpclassifyの結果が間違っています

  17. 17

    Haskell repa:2つの配列の内積結果が間違っています

  18. 18

    PHPのarray_count_valuesの結果が間違っています

  19. 19

    関数の型宣言が間違っています

  20. 20

    main関数の戻り値が間違っていますか?

  21. 21

    PythonCaesar関数の出力が間違っています

  22. 22

    vhdlの関数が間違っています

  23. 23

    ATOM関数の戻り値が間違っています

  24. 24

    ElasticsearchMatchQueryが間違った結果を返しています

  25. 25

    Objective-Cでは、fabsf()の結果タイプが間違っています

  26. 26

    Conv2dTensorflowの結果が間違っています-精度= 0.0000e + 00

  27. 27

    タイムデルタ操作の結果が間違っています

  28. 28

    hash_djb2 PHPの結果が間違っていますか?

  29. 29

    Oracleの "order by"句は、結果を間違った順序で返すか、結果が欠落しています

ホットタグ

アーカイブ