1

$キーとして「formname」を含む配列があります。次の関数を実行すると:

    function in_array_r($needle, $arr, $strict = true) {
    $form_id = $lead['form_id'];
                $user_id = $lead['id'];
                $attachments = array();
$arr=get_defined_vars();
$needle="formna1me";
    foreach ($arr as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            echo "found"; exit;
        }
    }

    echo "notfound"; exit;
}

本来の「見つかった」を返します。しかし、を変更する$needleと、$needle = "bbrubrcuyrfbur"見つかったものも返されます。それは単に見つかって戻ってくるだけですか?何が悪いのかわからない。

4

2 に答える 2

1

関数を再帰的に呼び出しています。needleasで関数を呼び出してもbbrubrcuyrfbur、状態ではasでif再帰的に関数が呼び出されます。 needleformna1me

最初の再帰の中で、as$arr=get_defined_vars();の値を読み取ります。次にが再割り当てされ、条件は から の条件と一致します。$needleformna1me$needleformna1meifformna1me$needle$args

2 行目から 6 行目はおそらくその関数に含まれていないはずです。

于 2012-10-29T16:50:23.930 に答える
0

is_array は以下のように動作するはずです。配列ではなく is_array のアイテムをチェックしています

$yes = array('this', 'is', 'an array');

echo is_array($yes) ? 'Array' : 'not an Array';

is_array が行っていることは、

is_array— 変数が配列かどうかを調べる

あなたのコメントとして

tofind 値が配列内にあることを確認する try in_array— 値が配列内に存在するかどうかを確認する

$arr = array("Mac", "NT", "msc", "Linux");
if (in_array("Linux", $arr)) {
   echo 'yes it is';
}
于 2012-10-29T16:03:52.513 に答える