динамически создаваемый массив в php - PullRequest
0 голосов
/ 12 марта 2012

Я пытаюсь динамически создавать массивы, а затем заполнять их, создавая имена массивов, используя переменную, но я получаю следующие предупреждения

Предупреждение: in_array () ожидает, что параметр 2 будет массивом, значение равно нулю Предупреждение: array_push() ожидает, что параметром 1 будет массив, значение NULL

Для одного массива этот метод работал, но для массива массивов это не работает.Как это сделать?

<?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);
  }
}


?>

Ответы [ 3 ]

5 голосов
/ 12 марта 2012

Почему даже пытаются поместить имя массива в переменную, а затем удалить ссылку на это имя?Почему бы просто не сделать это:

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);
  }
}
3 голосов
/ 12 марта 2012

Вы получаете первое предупреждение, потому что ваша переменная $arrayName на самом деле не является массивом, вы превратили ее в строку.

Так что вместо:

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

Вы должны иметь это:

$arrayName = $word_list[$i];

Вы получаете второе предупреждение, потому что ваш первый параметр не является массивом.

Так что вместо:

array_push($$arrayName , $word);

Вы должны иметь это:

array_push($arrayName , $word);

Если вы сделаете эти изменения, в итоге вы получите массив, который выглядит следующим образом:

$wordlist = array( array("1", "abc"), array("1", "abc"), ... ); // repeated 23 times
1 голос
/ 12 марта 2012

И в цикле for вы обращаетесь к массиву неверным способом

Вот ваш исправленный код

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;
  }

}
...