php數組基礎知識

自 5.4 起可使用短數組定義語法,用 [] 替代 array()php

<?php 數組

$array = array(
    
"foo" => "bar",
    
"bar" => "foo",
);

// 自 PHP 5.4 起
$array = [
    
"foo" => "bar",
    
"bar" => "foo",
];

?> 函數

key 能夠是 integer 或者 stringvalue 能夠是任意類型。 spa

此外 key 會有以下的強制轉換: .net

  • 包含有合法整型值的字符串會被轉換爲整型。例如鍵名 "8" 實際會被儲存爲 8。可是 "08" 則不會強制轉換,由於其不是一個合法的十進制數值。
  • 浮點數也會被轉換爲整型,意味着其小數部分會被捨去。例如鍵名 8.7 實際會被儲存爲 8
  • 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存爲 1 而鍵名 false 會被儲存爲 0
  • Null 會被轉換爲空字符串,即鍵名 null 實際會被儲存爲 ""
  • 數組和對象不能被用爲鍵名。堅持這麼作會致使警告:Illegal offset type

若是在數組定義中多個單元都使用了同一個鍵名,則只使用了最後一個,以前的都被覆蓋了。 code

方括號和花括號能夠互換使用來訪問數組單元(例如 $array[42] 和 $array{42})

要修改某個值,經過其鍵名給該單元賦一個新值。要刪除某鍵值對,對其調用 unset() 函數。 對象


若是給出方括號但沒有指定鍵名,則取當前最大整數索引值,新的鍵名將是該值加上 1(可是最小爲 0)。若是當前尚未整數索引,則鍵名將爲 0索引

注意這裏所使用的最大整數鍵名不必定當前就在數組中。它只要在上次數組從新生成索引後曾經存在過就好了。如下面的例子來講明: 字符串

<?php
// 建立一個簡單的數組
$array = array(12345);
print_r($array);

// 如今刪除其中的全部元素,但保持數組自己不變:
foreach ($array as $i => $value) {
    unset(
$array[$i]);
}
print_r($array);

// 添加一個單元(注意新的鍵名是 5,而不是你可能覺得的 0)
$array[] = 6;
print_r($array);

// 從新索引:
$array array_values($array);
$array[] = 7;
print_r($array);
?>

以上例程會輸出: get

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

數組作什麼和不作什麼

爲何 $foo[bar] 錯了?

應該始終在用字符串表示的數組索引上加上引號。例如用 $foo['bar'] 而不是 $foo[bar]。可是爲何呢?可能在老的腳本中見過以下語法:

<?php
$foo
[bar] = 'enemy';
echo 
$foo[bar];
// etc
?>

這樣是錯的,但能夠正常運行。那麼爲何錯了呢?緣由是此代碼中有一個未定義的常量(bar)而不是字符串('bar'-注意引號),而 PHP 可能會在之後定義此常量,不幸的是你的代碼中有一樣的名字。它能運行,是由於 PHP 自動將裸字符串(沒有引號的字符串且不對應於任何已知符號)轉換成一個其值爲該裸字符串的正常字符串。例如,若是沒有常量定義爲 bar,PHP 將把它替代爲 'bar' 並使用之。

下標從 1 開始的數組

<?php
$firstquarter  
= array(=> 'January''February''March');
print_r($firstquarter);
?>

以上例程會輸出:

Array 
(
    [1] => 'January'
    [2] => 'February'
    [3] => 'March'
)
相關文章
相關標籤/搜索