crearea dinamică a matricei în php (Programare, Php, Array-Uri, Array-Uri Dinamice)

vaichidrewar a intrebat.

Încerc să creez array-uri în mod dinamic și apoi să le populez prin construirea array-urilor Nume folosind variabile, dar primesc următoarele avertismente

Avertizare: in_array() se așteaptă ca parametrul 2 să fie array, null givenAvertizare: array_push() se așteaptă ca parametrul 1 să fie array, null given

Această metodă a funcționat pentru o singură matrice, dar nu funcționează pentru o matrice de matrici. Cum ar trebui să se procedeze?

<?php

for ($i = 1; $i <= 23; ++$i) 
{
        $word_list[$i] = array("1"); 
}


for ($i = 1; $i <= 23; ++$i) 
{
  $word = "abc";
  $arrayName = "word_list[" . $i . "]";
  if(!in_array($word, ${$arrayName})) 
  {
    array_push($$arrayName , $word);
  }
}


?>

Comentarii

  • Încercați echo $arrayName și echo $$arrayName și vedeți ce obțineți. Pun pariu că este ceva inutil și nul, așa cum spune mesajul de eroare. –  > Por Scott M..
3 răspunsuri
Aleks G

De ce încerci chiar să pui numele matricei într-o variabilă și apoi să de-referențiezi acel nume? De ce nu faceți doar acest lucru:

for ($i = 1; $i <= 23; ++$i) 
{
  $word = "abc";
  $arrayName = "word_list[" . $i . "]";
  if(!in_array($word, $word_list[$i])) 
  {
    array_push($word_list[$i] , $word);
  }
}

Comentarii

  • Cred că OP a construit acest exemplu pentru noi și, în realitate, nu are numele array-ului (cu excepția șirului). –  > Por Kaii.
  • @Kaii posibil. Urăsc doar să văd o soluție supra-inginerească. Atunci când există o soluție simplă, de ce să nu o folosim pur și simplu? –  > Por Aleks G.
fvuong

Primești primul avertisment pentru că $arrayName variabila nu este de fapt o matrice, ci ați transformat-o într-un șir de caractere.

Deci, în loc de:

$arrayName = "word_list[" . $i . "]";

Ar trebui să aveți acest lucru:

$arrayName = $word_list[$i];

Ați primit al doilea avertisment deoarece primul parametru nu este un array.

Deci, în loc de:

array_push($$arrayName , $word);

Ar trebui să aveți acest lucru:

array_push($arrayName , $word);

Dacă efectuați aceste modificări, veți obține o matrice care va arăta astfel la final:

$wordlist = array( array("1", "abc"), array("1", "abc"), ... ); // repeated 23 times

Starx

Iar în bucla for, accesați array-ul în mod greșit

Iată codul corectat

for ($i = 1; $i <= 23; ++$i) 
{
  $word = "abc";
  $arrayName = $word_list[$i];
  if(!in_array($word, $arrayName)) 
  {
    array_push($arrayName , $word);
    $word_list[$i] = $arrayName;
  }

}

Comentarii

  • @vaichidrewar, Am înțeles greșit întrebarea, DAR ACUM fixat cu soluția testată –  > Por Starx.