如何在PHP中使用预定义的大小创建一个空数组?

时间:2011-03-22 00:39:36

标签: php arrays

我正在for循环中创建一个新数组。

for $i < $number_of_items
    $data[$i] = $some_data;

PHP一直抱怨偏移,因为每次迭代我都会为数组添加一个新索引,这有点愚蠢。

Notice: Undefined offset: 1 in include() (line 23 of /...
Notice: Undefined offset: 1 in include() (line 23 of /..
Notice: Undefined offset: 1 in include() (line 23 of /..

有没有办法预先定义数组中的数字项,以便PHP不会显示此通知?

换句话说,我可以用与此类似的方式预定义数组的大小吗?

$myarray = array($size_of_the_earray);

7 个答案:

答案 0 :(得分:73)

无法为该数组的元素提供值,也无法创建预定义大小的数组。


初始化这样的数组的最佳方法是array_fill。到目前为止,优于各种环路和插入解决方案。

$my_array = array_fill(0, $size_of_the_array, $some_data);

$my_array中的每个位置都会包含$some_data

array_fill中的第一个零只表示数组需要用该值填充的索引。

答案 1 :(得分:17)

你无法在php中预定义数组的大小。实现目标的一个好方法如下:

// Create a new array.
$array = array(); 

// Add an item while $i < yourWantedItemQuantity
for ($i = 0; $i < $number_of_items; $i++)
{
    array_push($array, $some_data);
    //or $array[] = $some_data; for single items.
}

请注意,使用array_fill()填充数组会更快:

$array = array_fill(0,$number_of_items, $some_data);

如果要验证是否已在索引处设置了值,则应使用以下内容: array_key_exists(“key”,$ array)或isset($ array [“key”])

参见array_key_existsissetarray_fill

答案 2 :(得分:12)

可能相关,如果你想初始化并用一系列值填充数组,请使用PHP(等待它......)range function

$a = range(1, 5);  // array(1,2,3,4,5)
$a = range(0, 10, 2); // array(0,2,4,6,8,10)

答案 3 :(得分:5)

PHP Arrays不需要声明大小。

  

PHP中的数组实际上是一个有序的地图

您也不应该使用您所示示例之类的代码获得警告/通知。当从数组中读取时,人们得到的常见通知是“未定义的偏移量”。

解决此问题的方法是与issetarray_key_exists核对,或使用以下功能:

function isset_or($array, $key, $default = NULL) {
    return isset($array[$key]) ? $array[$key] : $default;
}

这样你就可以避免重复的代码。

注意:如果数组中的元素为NULL,但isset的性能提升超过array_key_exists,则{{1}}返回false。

如果要出于性能原因指定大小的数组,请查看:

标准PHP库中的

SplFixedArray

答案 4 :(得分:2)

还有array_pad。您可以像这样使用它:

$data = array_pad($data,$number_of_items,0);

使用零初始化数组$ data的$ number_of_items位置。

答案 5 :(得分:0)

 $array = new SplFixedArray(5);
   echo $array->getSize()."\n";

您可以使用PHP文档更多信息,请检查此链接 https://www.php.net/manual/en/splfixedarray.setsize.php

答案 6 :(得分:-1)

PHP提供两种类型的数组。

  • 普通数组
  • SplFixedArray

普通数组:此数组是动态的。

SplFixedArray:这是一个标准的php库,它提供了创建修复大小数组的能力。