在php中动态创建数组

时间:2012-03-12 19:39:47

标签: php arrays dynamic-arrays

我正在尝试动态创建数组,然后通过使用变量构造数组名称来填充它们,但我收到以下警告

警告:in_array()期望参数2为数组,给定为null 警告: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 个答案:

答案 0 :(得分:5)

为什么甚至试图将数组名称放在变量中然后取消引用该名称?为什么不这样做:

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

答案 1 :(得分:3)

您收到第一个警告,因为您的$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

答案 2 :(得分:1)

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

}