web-dev-qa-db-fra.com

PHP - ne peut pas utiliser un scalaire comme avertissement de tableau

J'ai le code suivant:

 $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'];
            }
        } 
    }

Le code semble fonctionner correctement, mais je reçois cet avertissement:

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).

Quelqu'un peut-il me dire comment résoudre ce problème?

45
zozo

Vous devez définir$final[$id] à un tableau avant d'y ajouter des éléments. Intiialiser avec soit

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

ou

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

Un peu en retard, mais pour tous ceux qui se demandent pourquoi ils reçoivent le message "Avertissement: impossible d'utiliser une valeur scalaire comme tableau";

la raison en est que quelque part, vous avez d’abord déclaré votre variable avec un entier ou une chaîne normal, puis vous avez essayé de la transformer en tableau.

j'espère que ça t'as aidé

68
Lan

L’autre problème que j’ai vu à ce sujet est le fait que les tableaux de nidification ont tendance à lancer l’avertissement. Considérez les points suivants:

$data = [
"rs" => null
]

cela ci-dessus fonctionnera parfaitement si utilisé comme:

$data["rs"] =  5;

Mais le dessous lancera un avertissement:

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

$data[rs][rs1] = 2; // this will throw the warning unless assigned to an array
2
Peace Ngara

Assurez-vous de ne pas le déclarer en tant qu'entier, float, chaîne ou booléen auparavant. http://php.net/manual/en/function.is-scalar.php

1
Benjamin

Assurez-vous également que vous ne déclarez pas un tableau, puis essayez d’attribuer quelque chose d’autre au tableau, par exemple une chaîne, une valeur flottante ou un entier. J'ai eu ce problème. Si vous faites des échos de sortie, je voyais ce que je voulais la première fois, mais pas après une autre passe du même code.

1
Allyn O