2011-03-22 365 views
33

我正在for循環中創建一個新的數組。如何用PHP預定義大小創建一個空數組?

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

PHP一直抱怨偏移,因爲每個迭代我添加了一個新的指數爲陣,這是一種愚蠢的。 ()中的第23行... ...注意:未定義偏移量:1在include()(第23行/ .. .. 注意:未定義偏移量:1 in include() )的(23行/ ..

如何解決這個問題?有沒有一些方法來預定義數組中的數字項目,使PHP不會拋出愚蠢的錯誤呢?就像

$myarray = array($size_of_the_earray); 
+2

當你分配給這些索引時,PHP不應該抱怨。 – BoltClock 2011-03-22 00:44:17

+6

你能提供產生錯誤的實際代碼嗎?提供的代碼無效。設置索引值時,您不應該從數組中獲取未定義的偏移量錯誤。 – Hamish 2011-03-22 00:46:49

回答

50

沒有一種方法來做到這一點。

爲後代

初始化這樣一個數組的最佳方法是array_fill。在各種迴路和插入解決方案上遠遠優選。

+0

注意:未定義的偏移量:1在include()(第23行/ )注意:未定義的偏移量:2在include()(第23行/ ... – 2011-03-22 00:43:01

+2

@Reed:這聽起來像您試圖從數組,而您的示例代碼看起來像您正在嘗試*寫*,哪一個是? – Jon 2011-03-22 00:44:13

+0

您是對的,在代碼的同一行中,我從另一個數組讀取數據,認爲沒問題。睡眠後的代碼......謝謝! – 2011-03-22 00:48:33

16

你不能在php中預定義一個數組的大小。到acheive你的目標的一個好方法是:

// 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( 「鑰匙」,$陣列)或isset($陣列[ 「鑰匙」])

array_key_existsissetarray_fill

+2

請注意,對於單個項目,速記'$ array [] = $ some_data'比'array_push()'速度更快 – Phil 2011-03-22 00:49:34

4

PHP Arrays不需要聲明一個大小。

PHP中的數組實際上是一個有序圖

你也不要讓使用像你顯示的示例代碼的警告/通知。從數組中讀取時,通常人們得到的是「Undefined offset」。

應對這種情況的方法是檢查與issetarray_key_exists,或者使用功能,如:

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

這樣就可以避免重複的代碼。

注意:如果數組中的元素爲NULL,則isset返回false,但性能增益高於array_key_exists

如果要指定一個尺寸由於性能原因數組,看看:

SplFixedArray標準PHP資源庫中

+0

我想了解爲什麼默認PHP數組未針對性能進行優化。手冊說,它實際上是一個有序的地圖。與哈希映射或哈希表有什麼不同?哈希表的概念對我來說很清楚,它是爲可擴展性和隨機訪問而優化的方式,但是哈希映射仍不清楚。 – 2016-06-05 10:13:56

+0

它是高性能的,但它不會像具有指定大小的數組一樣具有性能。 – Jacob 2016-06-06 18:49:59

7

可能相關的,如果你想在初始化和值的範圍填充數組,使用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) 
2

還有array_pad。您可以使用它像這樣:

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

對於零初始化數組$數據的$ NUMBER_OF_ITEMS位置。

-1

PHP提供了兩種類型的數組。

  • 正常陣列
  • SplFixedArray

正常陣列:該數組是動態的。

SplFixedArray:這是一個標準的php庫,它提供了創建修正大小數組的能力。

相關問題