59

私は次のコードを持っています:

 $final = array();
    foreach ($words as $word) {
        $query = "SELECT Something";
        $result = $this->_db->fetchAll($query, "%".$word."%");
        foreach ($result as $row)
        {
            $id = $row['page_id'];
            if (!empty($final[$id][0]))
            {
                $final[$id][0] = $final[$id][0]+3;
            }
            else
            {
                $final[$id][0] = 3;
                $final[$id]['link'] = "/".$row['permalink'];
                $final[$id]['title'] = $row['title'];
            }
        } 
    }

コードSEEMSは正常に機能しますが、次の警告が表示されます。

Warning: Cannot use a scalar value as an array in line X, Y, Z (the line with: $final[$id][0] = 3, and the next 2).

誰かがこれを修正する方法を教えてもらえますか?

4

5 に答える 5

95

$final[$id]配列に要素を追加する前に、配列に設定する必要があります。どちらかでそれを初期化する

$final[$id] = array();
$final[$id][0] = 3;
$final[$id]['link'] = "/".$row['permalink'];
$final[$id]['title'] = $row['title'];

また

$final[$id] = array(0 => 3);
$final[$id]['link'] = "/".$row['permalink'];
$final[$id]['title'] = $row['title'];
于 2011-05-16T15:49:19.157 に答える
84

少し遅れますが、なぜ「警告:スカラー値を配列として使用できません」というメッセージが表示されるのか疑問に思っている人には。

その理由は、どこかで最初に通常の整数または文字列で変数を宣言し、後でそれを配列に変換しようとしているためです。

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

于 2013-05-29T23:22:54.873 に答える
4

これに関して私が見た他の問題は、配列をネストするときに警告をスローする傾向があることです。次のことを考慮してください。

$data = [
"rs" => null
]

上記のように使用すると、上記は完全に正常に機能します。

$data["rs"] =  5;

しかし、以下は警告をスローします::

$data = [
    "rs" => [
       "rs1" => null;
       ]
    ]
..

$data[rs][rs1] = 2; // this will throw the warning unless assigned to an array
于 2017-12-19T10:49:57.613 に答える
1

また、配列として宣言していないことを確認してから、文字列、浮動小数点、整数など、他の何かを配列に割り当てようとします。私はその問題を抱えていました。出力のエコーをいくつか実行すると、最初に必要なものが表示されましたが、同じコードをもう一度パスした後は表示されませんでした。

于 2014-06-30T15:31:14.447 に答える
0

以前に整数、浮動小数点、文字列、またはブール値として宣言しないようにしてください。 http://php.net/manual/en/function.is-scalar.php

于 2014-12-30T13:38:54.803 に答える