Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Array (Array)

PHP-Array (Array)

伊谢尔伦
伊谢尔伦Original
2016-11-24 14:00:031358Durchsuche

Ein Array in PHP ist eigentlich eine geordnete Karte. Eine Karte ist ein Typ, der Schlüsseln Werte zuordnet. Dieser Typ ist in vielerlei Hinsicht optimiert, sodass er als echtes Array oder Liste (Vektor), Hash-Tabelle (eine Implementierung von Map), Wörterbuch, Satz, Stapel, Warteschlange und viele weitere Möglichkeiten behandelt werden kann. Da der Wert eines Array-Elements auch ein anderes Array sein kann, sind auch Baumstrukturen und mehrdimensionale Arrays zulässig.

Die Erläuterung dieser Strukturen würde den Rahmen dieses Handbuchs sprengen, aber für jede Struktur wird mindestens ein Beispiel bereitgestellt. Für weitere Informationen zu diesen Strukturen wird empfohlen, andere Arbeiten zu diesem breiten Thema zu konsultieren.

Syntax

Array array() definieren

Sie können die Sprachstruktur array() verwenden, um ein neues Array zu erstellen. Es akzeptiert eine beliebige Anzahl durch Kommas getrennter Schlüssel => Wertepaare.

array( key => value
, ...
)
// key kann eine Ganzzahl oder eine Zeichenfolge sein. string
// value ) kann ein beliebiger Wert sein Typ

Das Komma nach dem letzten Array-Element kann weggelassen werden. Wird normalerweise in einzeiligen Array-Definitionen verwendet, z. B. array(1, 2) anstelle von array(1, 2, ). Es ist üblich, das letzte Komma in mehrzeiligen Array-Definitionen zu belassen, um das Hinzufügen einer neuen Zelle zu erleichtern.

Seit 5.4 ist es möglich, eine kurze Array-Definitionssyntax zu verwenden, indem [] anstelle von array() verwendet wird.

Beispiel Nr. 1 Ein einfacher Array-

<?php
$array = array(
   "foo" => "bar",
   "bar" => "foo",
);
 
// 自 PHP 5.4 起
$array = [
   "foo" => "bar",
   "bar" => "foo",
];
?>

Schlüssel kann eine Ganzzahl oder eine Zeichenfolge sein. Der Wert kann von beliebigem Typ sein.

Darüber hinaus hat der Schlüssel den folgenden Zwang:

Strings, die zulässige Ganzzahlwerte enthalten, werden in Ganzzahlen konvertiert. Beispielsweise wird der Schlüsselname „8“ tatsächlich als 8 gespeichert. „08“ wird jedoch nicht umgewandelt, da es sich nicht um einen zulässigen Dezimalwert handelt.

Gleitkommazahlen werden ebenfalls in ganze Zahlen umgewandelt, das heißt, ihre Dezimalteile werden gerundet. Beispielsweise wird der Schlüsselname 8.7 tatsächlich als 8 gespeichert.

Boolesche Werte werden ebenfalls in Ganzzahlen umgewandelt. Das heißt, der Schlüsselname true wird tatsächlich als 1 und der Schlüsselname false als 0 gespeichert.

Null wird in eine leere Zeichenfolge konvertiert, d. h. der Schlüsselname null wird tatsächlich als „“ gespeichert.

Arrays und Objekte können nicht als Schlüssel verwendet werden. Wenn Sie darauf bestehen, wird eine Warnung angezeigt: Unzulässiger Offset-Typ.

Wenn mehrere Einheiten denselben Schlüsselnamen in der Array-Definition verwenden, wird nur die letzte verwendet und die vorherigen werden überschrieben.

Beispiel #2 Beispiel für Typerzwingung und Überschreiben

<?php
$array = array(
   1    => "a",
   "1"  => "b",
   1.5  => "c",
   true => "d",
);
var_dump($array);
?>

Die obige Routine gibt Folgendes aus:

array(1) {
[1]=>
string(1) "d"
}

Alle Schlüsselnamen im obigen Beispiel werden auf 1 gezwungen , dann überschreibt jede neue Einheit den vorherigen Wert und es bleibt nur ein „d“ übrig.

PHP-Arrays können sowohl Ganzzahl- als auch String-Schlüsselnamen enthalten, da PHP eigentlich nicht zwischen indizierten Arrays und assoziativen Arrays unterscheidet.

Wenn für den angegebenen Wert kein Schlüssel angegeben ist, wird der aktuell größte ganzzahlige Indexwert verwendet und der neue Schlüsselname ist dieser Wert plus eins. Wenn der angegebene Schlüsselname bereits einen Wert hat, wird der Wert überschrieben.

Beispiel #3 Mischen von Ganzzahl- und String-Schlüsselnamen

<?php
$array = array(
   "foo" => "bar",
   "bar" => "foo",
   100   => -100,
   -100  => 100,
);
var_dump($array);
?>

Die obige Routine gibt Folgendes aus:

array(4) {
["foo"]=>
string(3) "bar"
["bar"]=>
string(3) "foo"
[100]=>
int(-100)
[-100]=>
int(100)
}

Schlüssel ist optional. Wenn nicht angegeben, verwendet PHP automatisch den größten zuvor verwendeten Ganzzahlschlüssel plus 1 als neuen Schlüssel.

Beispiel #4 Index-Array ohne Schlüsselnamen

<?php
$array = array("foo", "bar", "hallo", "world");
var_dump($array);
?>

Die obige Routine gibt Folgendes aus:

array(4) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(5) "hallo"
[3]=>
string(5) "world"
}

Sie können Schlüsselnamen auch nur für bestimmte Einheiten angeben andere Leerzeichen:

Beispiel #5 Geben Sie nur Schlüsselnamen für einige Einheiten an

<?php
$array = array(
        "a",
        "b",
   6 => "c",
        "d",
);
var_dump($array);
?>

Die obige Routine gibt Folgendes aus:

array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}

Sie können den letzten sehen Dem Wert „d“ wird automatisch der Schlüsselname 7 zugewiesen. Dies liegt daran, dass der bisher größte ganzzahlige Schlüssel 6 war.

Verwenden Sie die Syntax in eckigen Klammern, um auf Array-Zellen zuzugreifen.

Auf Array-Zellen kann über die Syntax array[key] zugegriffen werden.

Beispiel #6 Zugriff auf Array-Zellen

<?php
$array = array(
   "foo" => "bar",
   42    => 24,
   "multi" => array(
        "dimensional" => array(
            "array" => "foo"
        )
   )
);
 
var_dump($array["foo"]);
var_dump($array[42]);
var_dump($array["multi"]["dimensional"]["array"]);
?>

Die obige Routine gibt Folgendes aus:

string(3) "bar"
int(24)
string(3) "foo"

Hinweis:

Eckige Klammern und geschweifte Klammern sind OK Für den Zugriff auf Array-Elemente austauschbar verwenden (z. B. haben $array[42] und $array{42} im obigen Beispiel die gleiche Wirkung).

Seit PHP 5.4 ist es möglich, Arrays zu verwenden, um indirekt auf die Ergebnisse von Funktions- oder Methodenaufrufen zu verweisen. Bisher konnte nur eine temporäre Variable übergeben werden.

Seit PHP 5.5 ist es möglich, die Array-Indirektion zu verwenden, um auf einen Array-Prototyp zu verweisen.

Beispiel #7 Indirekte Array-Referenz

<?php
function getArray() {
   return array(1, 2, 3);
}
 
// on PHP 5.4
$secondElement = getArray()[1];
 
// previously
$tmp = getArray();
$secondElement = $tmp[1];
// or
list(, $secondElement) = getArray();
?>

Hinweis:

Der Versuch, auf einen undefinierten Array-Schlüssel zuzugreifen, ist dasselbe wie der Zugriff auf eine beliebige undefinierte Variable: führt zum E_NOTICE-Level Fehlermeldung, das Ergebnis ist NULL.

Verwenden Sie zum Erstellen/Ändern die Syntax in eckigen Klammern

Sie können ein vorhandenes Array ändern, indem Sie dessen Werte explizit festlegen.

Dies wird erreicht, indem dem Array Werte zugewiesen werden, indem Schlüsselnamen in eckigen Klammern angegeben werden. Sie können den Schlüsselnamen auch weglassen. Fügen Sie in diesem Fall ein leeres Paar eckiger Klammern ([]) zum Variablennamen hinzu.

$arr[key] = value;
$arr[] = value;
// key 可以是 integer 或 string
// value 可以是任意类型的值

如果 $arr 还不存在,将会新建一个,这也是另一种新建数组的方法。不过并不鼓励这样做,因为如果 $arr 已经包含有值(例如来自请求变量的 string)则此值会保留而 [] 实际上代表着字符串访问运算符。初始化变量的最好方式是直接给其赋值。。

要修改某个值,通过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。

<?php
$arr = array(5 => 1, 12 => 2);
$arr[] = 56;    // This is the same as $arr[13] = 56;
               // at this point of the script
$arr["x"] = 42; // This adds a new element to
               // the array with key "x"
unset($arr[5]); // This removes the element from the array
unset($arr);    // This deletes the whole array
?>

Note:

如上所述,如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(但是最小为 0)。如果当前还没有整数索引,则键名将为 0。

注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:

<?php
// 创建一个简单的数组
$array = array(1, 2, 3, 4, 5);
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);
?>

以上例程会输出:

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

实用函数

有很多操作数组的函数,参见数组函数一节。

Note:

unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。

d187627a39155b76819487cf772766aa 'January'
[2] => 'February'
[3] => 'March'
)

Example #12 填充数组

<?php
// fill an array with all items from a directory
$handle = opendir(&#39;.&#39;);
while (false !== ($file = readdir($handle))) {
   $files[] = $file;
}
closedir($handle);
?>

数组是有序的。也可以使用不同的排序函数来改变顺序。更多信息参见数组函数。可以用 count() 函数来数出数组中元素的个数。

Example #13 数组排序

<?php
sort($files);
print_r($files);
?>

因为数组中的值可以为任意值,也可是另一个数组。这样可以产生递归或多维数组。

Example #14 递归和多维数组

<?php
$fruits = array ( "fruits"  => array ( "a" => "orange",
                                      "b" => "banana",
                                      "c" => "apple"
                                    ),
                 "numbers" => array ( 1,
                                      2,
                                      3,
                                      4,
                                      5,
                                      6
                                    ),
                 "holes"   => array (      "first",
                                      5 => "second",
                                           "third"
                                    )
               );
 
// Some examples to address values in the array above
echo $fruits["holes"][5];    // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]);  // remove "first"
 
// Create a new multi-dimensional array
$juices["apple"]["green"] = "good";
?>

数组(Array) 的赋值总是会涉及到值的拷贝。使用引用运算符通过引用来拷贝数组。

<?php
$arr1 = array(2, 3);
$arr2 = $arr1;
$arr2[] = 4; // $arr2 is changed,
            // $arr1 is still array(2, 3)
$arr3 = &$arr1;
$arr3[] = 4; // now $arr1 and $arr3 are the same
?>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-Funktion number_format()Nächster Artikel:PHP-Funktion number_format()