3

私が書いたスクリプトをデバッグしようとしていますが、アセットの (多次元) 配列内に識別子が存在するかどうかを確認するという問題があります。この質問から得た再帰的に検索する in_array 関数を使用しています。

関数は次のとおりです。

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }
    return false;
}

私はこのデータを使用しています:

:「
B51MM36var_export

$sedols = array ( 0 => array ( 'ipsid' => '72', 'buyList' => '1', 'sedol' => 'B8LFDR7', 'isin' => 'LU0827876409', 'currency' => NULL, 'hedged' => '0', 'acc' => '0', 'inst' => '0', 'description' => 'BlackRock European Long Only', 'nonUKsitus' => '0', 'reportingStatus' => '0', 'matchScore' => 0, ), 1 => array ( 'ipsid' => '72', 'buyList' => '1', 'sedol' => 'LU0827876151', 'isin' => 'LU0827876151', 'currency' => 'USD', 'hedged' => '1', 'acc' => '1', 'inst' => '0', 'description' => 'Blackrock European Long Only', 'nonUKsitus' => '0', 'reportingStatus' => '0', 'matchScore' => 0, ), 2 => array ( 'ipsid' => '72', 'buyList' => '1', 'sedol' => 'LU0406496546 ', 'isin' => 'LU0406496546 ', 'currency' => 'EUR', 'hedged' => '1', 'acc' => '1', 'inst' => '0', 'description' => 'Blackrock European Long Only', 'nonUKsitus' => '0', 'reportingStatus' => '0', 'matchScore' => 0, ), 3 => array ( 'ipsid' => '72', 'buyList' => '1', 'sedol' => 'LU0827876409', 'isin' => 'LU0827876409', 'currency' => 'GBP', 'hedged' => '1', 'acc' => '0', 'inst' => '0', 'description' => 'Blackrock European Long Only', 'nonUKsitus' => '0', 'reportingStatus' => '1', 'matchScore' => 1, ), );

実行するvar_dump(in_array_r('B51MM36', $sedols));と出力されますbool(true)'B51MM36'文字列が干し草の山配列のどこにも表示されないので、私は混乱しています。ここで何が起こっているのか誰でも特定できますか?

4

2 に答える 2

2

その理由は、

var_dump('B51MM36' == 0);

本当です、理由はわかりません(おそらく文字列を整数に変換します)が、これは機能します

var_dump(in_array_r('B51MM36', $sedols, true));

厳密なオプションを削除してみてください

于 2013-07-04T09:39:16.513 に答える
2

他の人が述べたように、ロジックは期待される結果を生成しません。タイプが一致することも確認する必要があります。PHP は型ジャグリングを行います: http://php.net/manual/en/language.operators.comparison.php

したがって、この場合、キャスト後0=='B51MM36'の値は 0 であるため、true が返されます。B51MM36

お役に立てれば

于 2013-07-04T09:39:38.560 に答える