简体   繁体   中英

dynamically creating array in php

I am trying to create arrays dynamically and then populate them by constructing array Names using variable but I am getting the following warnings

Warning: in_array() expects parameter 2 to be array, null given Warning: array_push() expects parameter 1 to be array, null given

For single array this method worked but for array of arrays this is not working. How should this be done?

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


?>

Why are even trying to put array name in a variable and then de-reference that name? Why not just do this:

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

You get the first warning because your $arrayName variable is not actually an array, you made it into a string.

So instead of:

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

You should have this:

$arrayName = $word_list[$i];

You get your second warning because your first parameter is not an array.

So instead of:

array_push($$arrayName , $word);

You should have this:

array_push($arrayName , $word);

If you make these changes you will get an array that looks like this in the end:

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

And in the for loop, you are accessing the array the wrong way

Here is your corrected code

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

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM