배열 소개
배열 생성
배열의 동적 증가
배열 순회
배열 관련 기능
배열 연산자
지금까지 배운 내용은 변수와 상수입니다. 개별 데이터 조각이며 때로는 동일한 유형의 일부 값이나 관련 없는 일부 값을 합리적으로 저장해야 할 필요성이 있으며, 이를 사용할 때 특정 규칙에 따라 사용할 수 있습니다. 데이터를 가져옵니다. 이때 기존 변수로는 요구 사항을 충족할 수 없으므로 여기서는 배열을 사용합니다.
PHP의 배열은 다른 언어의 배열과 다릅니다. 이는 PHP 언어 구문이 느슨하기 때문이기도 합니다. 차이점은 무엇입니까?
소위 배열이란 동일한 데이터 유형 또는 다른 데이터 유형의 요소를 일정한 순서로 배열한 것입니다. 한정된 수의 변수에 이름을 붙인 후 이를 사용하는 변수의 집합입니다. 이를 구별하기 위해 숫자를 사용합니다. 이 이름을 배열 이름, 숫자를 첨자라고 합니다. 배열을 구성하는 개별 변수는 배열의 구성 요소라고도 하며 배열 요소라고도 하며 때로는 아래 첨자 변수라고도 합니다.
배열의 정의에 대한 대중적인 이해는 데이터의 집합을 저장하는 것입니다.
<?php //定义一个数组,里面存放的数据类型可以任意类型 $arr = array(12,true,false,'abcd',12.2); print_r($arr);//输出数组。 .....结果...... Array ( [0] => 12 [1] => 1 [2] => [3] => abcd [4] => 12.2 )
다양한 데이터 유형이 배열에 저장되어 출력 중에 출력될 수 있다는 것을 알 수 있습니다. 그리고 출력할 때 각 값에 해당하는 첨자가 있음을 알 수 있습니다. 이 첨자를 키라고 하며, 값은 특정 값을 얻으려는 경우 키로 얻을 수 있습니다.
$a = 数组名[键名] echo $arr[0]; .....结果...... 12
배열의 키 값이 숫자인 경우 해당 첨자는 0부터 계산됩니다.
그럼 배열은 어떻게 생성되나요?
인덱스 배열(아래 첨자는 숫자임) PHP에서 배열을 정의하는 세 가지 방법이 있습니다.
연관배열(아래첨자는 문자열)
배열의 아래첨자는 둘 다 갖습니다.
첫 번째 유형
<?php //定义数组,数值用逗号隔开。 $arr = array(1,2,3,4,'abcd',true); print_r($arr); .....结果...... Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => abcd [5] => 1 )
array() 언어 구조를 사용하여 새 배열을 생성하면 아래 첨자가 출력되는 것을 볼 수 있습니다. 숫자입니다. 데이터는 숫자 첨자를 통해서도 검색됩니다. 이것이 인덱스 배열입니다.
두 번째 방법
<?php //关联数组,自己定义下标,用=>来定义键和值 $arr = array('a' => 1,'b' => 2,'c' => 'abcde', 'd' => true); print_r($arr); .....结果...... Array ( [a] => 1 [b] => 2 [c] => abcde [d] => 1 )
이 방법도 array() 구문 구조를 사용하여 정의되지만 배열의 첨자는 직접 정의할 수 있습니다. 자신의 상황에 대한 아래 첨자. 키 값 정의와 관련하여 키에는 다음과 같은 강제 변환이 수행됩니다.
적법한 정수 값이 포함된 문자열은 정수로 변환됩니다. 예를 들어 키 이름 "8"은 실제로 8로 저장됩니다. 그러나 "08"은 합법적인 십진수 값이 아니기 때문에 캐스팅되지 않습니다.
부동 소수점 숫자도 정수로 변환됩니다. 즉, 소수 부분은 반올림됩니다. 예를 들어 키 이름 8.7은 실제로 8로 저장됩니다.
부울 값도 정수로 변환됩니다. 즉, 키 이름 true는 실제로 1로 저장되고 키 이름 false는 0으로 저장됩니다.
Null은 빈 문자열로 변환됩니다. 즉, 키 이름 null은 실제로 ""로 저장됩니다.
배열과 객체는 키로 사용할 수 없습니다. 이렇게 하면 다음과 같은 경고가 발생합니다: 잘못된 오프셋 유형.
배열 정의에서 여러 셀이 동일한 키 이름을 사용하는 경우 마지막 셀만 사용되고 이전 셀은 덮어쓰게 됩니다.
연관 배열의 값을 얻으려면 자체 정의된 키를 사용해야 합니다.
세 번째 유형
<?php $arr[0] = 1; $arr[2] = 2; $arr['a'] = 12; $arr[4] = 45; print_r($arr); .....结果...... Array ( [0] => 1 [2] => 2 [a] => 12 [4] => 45 )
세 번째 유형의 배열 정의는 대괄호를 사용하여 직접 정의할 수 있으며 시스템에서는 기본적으로 이를 배열로 간주하고 그것을 창조하십시오. 아래첨자의 경우 숫자나 문자열을 사용할 수 있습니다. 그러나 여러 장치가 배열 정의에서 동일한 키 이름을 사용하는 경우 마지막 항목만 사용되며 이전 항목을 덮어씁니다.
PHP의 배열 길이는 고정되어 있지 않습니다. 데이터 채우기가 완료되면 계속해서 데이터를 채울 수 있습니다. 시간이 지나면 배열 길이도 그에 따라 증가합니다. 이는 PHP 배열의 동적 성장입니다.
<?php for($i = 0; $i < 10; $i++){ $arr[] = $i; } print_r($arr); ......结果....... Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
위 코드는 for 루프를 사용하고 배열의 세 번째 정의 방법을 사용하여 값을 할당합니다. 그러나 배열의 대괄호 안에 아래 첨자를 쓰지 않고 프로그램을 작성했음을 알 수 있습니다. 오류를 보고하지 않았습니다. 이는 어레이의 동적 증가 때문입니다. 키 값이 지정되지 않으면 PHP는 자동으로 이전에 사용된 가장 큰 정수 키에 1을 더한 값을 새 키로 사용합니다. 따라서 출력에서 아래 첨자가 0부터 자동으로 증가하는 것을 볼 수 있습니다.
앞서 배열의 생성과 기본적인 사용법을 소개했는데, 배열에서 모든 값을 어떻게 추출할까요? PHP에서는 루프 제어 프로세스를 사용하여 배열의 값을 가져올 수 있고, 배열을 반복하여 내부 값을 하나씩 가져올 수 있습니다.
for
for를 사용하여 배열 순회 중에 배열의 값을 가져올 수 있습니다.
<?php $arr = array(1,9,4,2,8,10,5); $sum = count($arr); for($i = 0; $i < $sum; $i++){ echo $arr[$i] . ' '; } .....结果...... 1 9 4 2 8 10 5
上面的count()这个系统函数是统计一个数组里的所有元素,或者一个对象里的东西。从而的到数组的大小,也就是长度。然后通过for循环,把$i当做数组的下标($i从0开始)。
foreach
在上面的代码中如果我们的数组是关联数组,也就是数组的下标是一个字符串,那么上面的代码是不可能取出来。所以我们可以使用PHP提供的另外一种循环方法:foreach()。它的语法有两种:
foreach(数组名 as $key => $value){ } foreach(数组名 as $value){ }
其中“as”是一个关键字,不能变。
foreach里面有可以有三个参数,第一个参数是数组的名字,第二个参数
value是用来存储从数组中取出来的值。当然键和值得名字可以根据自己的情况自己取。
当里面的参数是两个的时候,$value只用来存放从数组中取出来的值,而没有键。
<?php $arr = array(1,9,4,2,8,10,5); foreach ($arr as $key => $value) { echo $key . '=>' . $value . ' '; } echo '<br>'; foreach ($arr as $value) { echo $value . ' '; } .....结果...... 0=>1 1=>9 2=>4 3=>2 4=>8 5=>10 6=>5 1 9 4 2 8 10 5
在第二个循环中没有键的输出。
上面的两种循环结构,就是我们常用到的数组遍历的方法,其中第二个方法,也就是用foreach的方法,我们会经常用到,因为这种方法对于所有的数组都适用,而不用考虑下标的问题。
count($array) 统计一个数组里的所有元素,或者一个对象里的东西。从而的到数组的大小,也就是长度。然后通过for循环,把
i从0开始)。
is_array($arr) 判断变量是否是一个数组。传一个变量进去,如果这个变量是一个数组,则返回true,否则则返回false;
array_search (value) 在数组中搜索给定的值,如果成功则返回相应的键名 。当我们想知道一个数组中有没有一个数,可以使用这个函数,如果数组中有你想找的值,则返回这个值对应的键值。
array_reverse($arr),传进去一个数组,返回一个与这个数组相反的数组。
<?php $arr = array(1,9,4,2,8,10,5); $array = array_reverse($arr); print_r($array); .....结果...... Array ( [0] => 5 [1] => 10 [2] => 8 [3] => 2 [4] => 4 [5] => 9 [6] => 1 )
array_merge($arr1,$arr2),传进去两个数组,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
unset($value) 传进去的变量可以销毁一个数组,也可以销毁数组中的一个值,当通过数组[下标]的方式传入是,会销毁数组中的这个值,但是当传进去的数组时,会把整个数组进行销毁。
sort() 本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。当数组中值都是数字的时候,可以使用这个函数进行排序,不过排序的结果是数字按照从小到大的顺序。
<?php $arr = array(1,9,4,2,8,10,5); sort($arr); print_r($arr); .....结果..... Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 [5] => 9 [6] => 10 )
usort($array,func_name) 传进去一个数组,和一个自己写的方法名。使用用户自定义的比较函数对数组中的值进行排序,在上面的一个方法,你只能得到从小到大的顺序,但是我们的要求是从大到小,这就会用到这个函数,第二个参数是我们写的排序规则的函数。
<?php $arr = array(1,9,4,2,8,10,5); function mysort($a,$b){ //写自己的函数,使数组按照从大到小的顺序进行排序。 if($a == $b){ return 0; } return $a < $b ? 1 : -1; } usort($arr, 'mysort'); print_r($arr); ......结果...... Array ( [0] => 10 [1] => 9 [2] => 8 [3] => 5 [4] => 4 [5] => 2 [6] => 1 )
这里使用到可变函数。
我们在运算符那一节并没有讲到数组的运算符,其实数组也是有运算符的。
$a + $b 联合 $a 和 $b 的联合。运算符把右边的数组元素附加到左边的数组后面,两个数组中都有的键名,则只用左边数组中的,右边的被忽略。
$a == $b 相等 如果 $a 和 $b 具有相同的键/值对则为 TRUE 。
$a === $b 全等 如果 $a 和 $b 具有相同的键/值对并且顺序和类型都相同则为 TRUE 。
$a != $b 不等 如果 $a 不等于 $b 则为 TRUE 。
$a a8093152e673feb7aba1828c43532094 $b 不等 如果 $a 不等于 $b 则为 TRUE 。
$a !== $b 不全等 如果 $a 不全等于 $b 则为 TRUE 。
在这里看来数组的运算符也是很好理解的。
数组讲到这里,算是基本讲完了,数组在我们的开发中是经常用到的,不止上面的以为数组,有时候数组里面还可能是一个数组,只要数组的结构在脑海中有清晰的认识,不管有几个数组,都是可以解决的,同时数组的出现也引出了一些关于数组的算法。
以上就是PHP基础教程八之数组的内容,更多相关内容请关注PHP中文网(www.php.cn)!