<div style="height:30px;line-height:30px;background:#f1f1f1;font-weight:bold;font-size:14px;padding:5px 10px;margin-bottom:10px;border-bottom:1px solid #ccc">類型>Array數組</div>
<p style="font-size:14px;font-weight:bold;padding:5px;background:#f8f8f8;border-radius:8px;border:1px solid #ddd;text-indent: 2em;">
PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的。可以用 array() 語言結構來新建一個數組。它接受任意數量用逗號分隔的 鍵(key) => 值(value)對。最后一個元素后面的逗號可以被省略。
</p>
* * * * *
<p style="font-size:14px;font-weight:bold;padding:5px;background:#f8f8f8;border-radius:8px;border:1px solid #ddd;text-indent: 2em;">
PHP 中的數組實際上是一個有序映射。映射是一種把 values 關聯到 keys 的類型。數組元素的值也可以是另一個數組,樹形結構和多維數組也是允許的。可以用 array() 語言結構來新建一個數組。它接受任意數量用逗號分隔的 鍵(key) => 值(value)對。最后一個元素后面的逗號可以被省略。
</p>
<p style="font-size:14px;font-weight:bold;padding:5px;background:#f8f8f8;border-radius:8px;border:1px solid #ddd;text-indent: 2em;">
要刪除某鍵值對,對其調用 unset() 函數。
</p>
key 可以是 integer 或者 string。value 可以是任意類型。
關于Key,有如下強制轉化:
* 浮點數也會被轉換為整型,意味著其小數部分會被舍去。例如鍵名 8.7 實際會被儲存為 8。
* 浮點數也會被轉換為整型,意味著其小數部分會被舍去。例如鍵名 8.7 實際會被儲存為 8。
* 布爾值也會被轉換成整型。即鍵名 true 實際會被儲存為 1 而鍵名 false 會被儲存為 0。
* Null 會被轉換為空字符串,即鍵名 null 實際會被儲存為 ""。
* 數組和對象不能被用為鍵名。堅持這么做會導致警告:Illegal offset type。
**注意:**
1.元素鍵名相同,后面的元素會將前面的元素覆蓋。
2.如果對給出的值沒有指定鍵名,則取當前最大的整數索引值,而新的鍵名將是該值加一。
3.key 為可選項。如果未指定,PHP 將自動使用之前用過的最大 integer 鍵名加上 1 作為新的鍵名。
4.方括號和花括號可以互換使用來訪問數組單元(例如 $array[42] 和 $array{42} 在上例中效果相同)。
5.試圖訪問一個未定義的數組鍵名與訪問任何未定義變量一樣:會導致 E_NOTICE 級別錯誤信息,其結果為 NULL。
6.unset() 函數允許刪除數組中的某個鍵。但要注意數組將不會重建索引。如果需要刪除后重建索引,可以用 array_values() 函數。
7.foreach 控制結構是專門用于數組的。它提供了一個簡單的方法來遍歷數組。
8. 重申一次,在雙引號字符串中,不給索引加上引號是合法的因此 "$foo[bar]" 是合法的(“合法”的原文為 valid。在實際測試中,這么做確實可以訪問數組的該元素,但是會報一個常量未定義的 notice。無論如何,強烈建議不要使用 $foo[bar]這樣的寫法,而要使用 $foo['bar'] 來訪問數組中元素。--haohappy 注)。至于為什么參見以上的例子和字符串中的變量解析中的解釋。
特殊案例:
~~~
<?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?>
~~~
輸出 0=>a,2=>b,6=>c,7=>d
~~~
$arr[key] = value;
$arr[] = value;
~~~
都是合法的寫法。
~~~
<?php
// 創建一個簡單的數組
$array = array(1, 2, 3, 4, 5);
print_r($array);//0,1,2,3,4,5,的鍵
// 現在刪除其中的所有元素,但保持數組本身不變:
foreach ($array as $i => $value) {
unset($array[$i]);
}
print_r($array);
//刪除了所有數組,但是他的最大鍵還是存在的
// 添加一個單元(注意新的鍵名是 5,而不是你可能以為的 0)
$array[] = 6;
print_r($array);
//[5]=>6
// 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
//array_values 是重新索引
//0=>6,1=>7
?>
~~~
~~~
<?php
$foo[bar] = 'enemy';
echo $foo[bar];
// etc
?>
~~~
這樣是錯的,但可以正常運行。那么為什么錯了呢?原因是此代碼中有一個未定義的常量(bar)而不是字符串('bar'-注意引號),而 PHP 可能會在以后定義此常量,不幸的是你的代碼中有同樣的名字。它能運行,是因為 PHP 自動將裸字符串(沒有引號的字符串且不對應于任何已知符號)轉換成一個其值為該裸字符串的正常字符串。例如,如果沒有常量定義為 bar,PHP 將把它替代為 'bar' 并使用之。
注意:這并不意味著總是給鍵名加上引號。用不著給鍵名為常量或變量的加上引號,否則會使 PHP 不能解析它們。有些數組的鍵值可能就是常量,甚至有些鍵就是一個變量,這些是可以不用加引號的。
案例:
~~~
<?php
// Show all errors
error_reporting(E_ALL);
$arr = array('fruit' => 'apple', 'veggie' => 'carrot');
// Correct
print $arr['fruit']; // apple
print $arr['veggie']; // carrot
// Incorrect. This works but also throws a PHP error of level E_NOTICE because
// of an undefined constant named fruit
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit]; // apple
// This defines a constant to demonstrate what's going on. The value 'veggie'
// is assigned to a constant named fruit.
define('fruit', 'veggie');
// Notice the difference now
print $arr['fruit']; // apple
print $arr[fruit]; // carrot
// The following is okay, as it's inside a string. Constants are not looked for
// within strings, so no E_NOTICE occurs here
print "Hello $arr[fruit]"; // Hello apple
// With one exception: braces surrounding arrays within strings allows constants
// to be interpreted
print "Hello {$arr[fruit]}"; // Hello carrot
print "Hello {$arr['fruit']}"; // Hello apple
// This will not work, and will result in a parse error, such as:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// This of course applies to using superglobals in strings as well
print "Hello $arr['fruit']";
print "Hello $_GET['foo']";
// Concatenation is another option
print "Hello " . $arr['fruit']; // Hello apple
?>
~~~
**轉換為數組**
* * * * *
對于任意 integer,float,string,boolean 和 resource 類型,如果將一個值轉換為數組,將得到一個僅有一個元素的數組,其下標為 0,該元素即為此標量的值。換句話說,(array)$scalarValue 與 array($scalarValue) 完全一樣。
如果一個 object 類型轉換為 array,則結果為一個數組,其單元為該對象的屬性。鍵名將為成員變量名,不過有幾點例外:整數屬性不可訪問;私有變量前會加上類名作前綴;保護變量前會加上一個 '*' 做前綴。這些前綴的前后都各有一個 NULL 字符。這會導致一些不可預知的行為:
**版本差別:**
*1.自 PHP 5.4 起可以用數組間接引用函數或方法調用的結果。之前只能通過一個臨時變量。
2.自 PHP 5.5 起可以用數組間接引用一個數組原型。*
<div style="background:#f0f0f0;text-align:center;font-size:12px;padding:20p">
? 2017-版權 杜二紅 如要轉載,請注明出處!
</div>