>백엔드 개발 >PHP 튜토리얼 >PHP 배열에 대한 실용적인 지식

PHP 배열에 대한 실용적인 지식

零下一度
零下一度원래의
2017-06-27 11:05:371083검색

PHP Array

Array는 동시에 두 개 이상의 값을 저장할 수 있는 특수 변수입니다.

***키워드: 배열 기본, 배열 순회, 슈퍼 전역 배열, 배열 함수, 배열 함수.

PHP 배열에 대한 기본 지식을 공유하겠습니다. PHP 학습에 도움이 되길 바랍니다~

1. PHP 배열의 기본 부분

PHP 배열 분류


PHP 배열은 다양한 첨자에 따라 연관 배열과 인덱스 배열로 구분됩니다.
인덱스 배열: 첨자는 0부터 시작하여 순서대로 증가합니다.
연관 배열: 첨자는 문자열 형식이며 각 첨자 문자열은 배열 값과 일대일로 연결됩니다(객체의 키-값 쌍과 유사)

코드 데모 :

1 $arr1 = array(1,2,3,4,5,6,7);//索引数组2 var_dump($arr1);3    4 $arr2 = array("one"=>1,"two"=>2,"three"=>3);//关联数组5 var_dump($arr2);6    7 $arr3 = array(1,"one"=>2,3,5=>4,5,6,"10.0"=>7,"08"=>8,"08"=>10,"hahah"=>9);8 var_dump($arr3);

II연관 배열 및 인덱스 배열 정보


1. 배열에는 인덱스 배열과 연관 배열이 동시에 존재할 수 있습니다.
array(1,2,3,"one"=>4);

2. 배열에서 모든 인덱스 배열은 지정되지 않은 경우 기본적으로 관련 항목을 제거하고 증가합니다( 즉, 연관 배열은 인덱스 비트를 차지하지 않습니다)
array(1,2,"one"=>3,4,5);//인덱스 1,2,4,5--->0 /1 /2/3

3. 연관 배열의 키가 순수 십진 정수 문자열인 경우
는 이 숫자를 인덱스 배열의 인덱스 값으로 변환합니다. 08" 형식인 경우에도 여전히 연관 배열이며 인덱스로 변환되지 않습니다.)
array(1,2,"one"=>3,"9"=>4,"010"=>5) ;//1 ,2,4 index --->0/1/9

4. 관련 배열의 키를 수동으로 지정하는 경우, 다음과 같이 반복되는 경우 인덱스 배열의 첨자 이전 키 또는 아래 첨자이면 나중에 지정된 값이 이전 값을 덮어씁니다.
array(1,"one"=>2,0=>5,"one"=>6);--- >Print array, 0=>5, "one"=>6

5. 인덱스 배열 첨자를 수동으로 지정하면 이후의 자체 증가 첨자는 최대값에 따라 순차적으로 증가합니다. 이전 아래첨자.
array(1,2,7=>3,4);--->1,2,3,4의 첨자--->0/1/7/8

Three배열 선언 방법


1. 직접 할당 선언
$arr[] = 1;
$arr[] = 1;
$arr[] = 1 ;
$arr[] = 1;
$arr[] = 1;
var_dump($arr);

2. 리터럴 선언(PHP5.4 버전 이후 사용 가능) )
$arr = [1,2,3,4,"one"=>5,6];
var_dump($arr);

3. 새 키워드
$arr = array(1,2,3,4,5);
var_dump($arr);

数组元素的读取


PHP中,数组支持[]和{}读取下标。


多维数组

①数组的一个值,依然是一个数组,我们称这种数组为多维数组;
②多维数组,不要求所有的项都是数组,可以是数组与普通值的混合;
③多维数组,也不要求每个子数组的个数限制,可以是任意的长度。

使用多维数组,一定要注意,数组中分隔用逗号!
原则上,多维数组一般不超过3层使用!

 

三维数组代码演示如下:

 1 $H51701 = array( 2 "group1"=>array( 3 array("name"=>"张三","age"=>14,"sex"=>"男"), 4 array("name"=>"李四","age"=>15,"sex"=>"男"), 5 array("name"=>"王二","age"=>13,"sex"=>"男") 6 ), 7 "group2"=>array( 8 array("name"=>"张三","age"=>15,"sex"=>"男"), 9 array("name"=>"李四","age"=>15,"sex"=>"男"),10 array("name"=>"王二","age"=>14,"sex"=>"男")11 ),12 "group3"=>array(13 array("name"=>"张三","age"=>14,"sex"=>"男"),14 array("name"=>"李四","age"=>18,"sex"=>"男"),15 array("name"=>"王二","age"=>24,"sex"=>"男")16 ),17 );18 var_dump($H51701);
二、数组遍历


1、使用for循环遍历数组

count($arr);用于统计数组元素的个数

for循环只能用于遍历,纯索引数组!
如果存在关联数组,count统计时会统计两种数组的总个数,使用for循环遍历混合数组,导致数组越界!

代码如下:

1 $arr = array(1,2,3,"one"=>4,5,6,7);2 $num = count($arr);3 echo"数组元素的个数{$num}<br/>";4 for($i=0;$i<$num;$i++){5 echo "{$i}==>{$arr[$i]}<br/>";6 }

 

2、forEach循环遍历数组
foreach可以遍历任何类型的数组!

代码如下:

1 $arr = array(1,2,3,"one"=>4,5,6,7);2 foreach($arr as $key=>$item){3 echo "{$key}==>{$item}<br/>";4 }

 

下面我们来做一个数组遍历的小练习~看代码~

 1 $arr = array( 2 "group1"=>array( 3 array("name"=>"张三","age"=>14,"sex"=>"男"), 4 array("name"=>"李四","age"=>12,"sex"=>"男"), 5 array("name"=>"王二","age"=>18,"sex"=>"男") 6 ), 7 "group2"=>array( 8 array("name"=>"张三","age"=>14,"sex"=>"男"), 9 array("name"=>"李四","age"=>16,"sex"=>"男"),10 array("name"=>"王二","age"=>19,"sex"=>"男")11 ),12 "group3"=>array(13 array("name"=>"张三","age"=>14,"sex"=>"男"),14 array("name"=>"李四","age"=>12,"sex"=>"男"),15 array("name"=>"王二","age"=>13,"sex"=>"男")16 ),17 );18 19 foreach($arr as $key=>$value){20 echo "{$key}<br/>"; 
21 foreach($value as $key1=>$value1){22 echo "第".($key1+1)."个同学<br/>";23 foreach($value1 as $key2=>$value2){24 echo "{$key2}==>{$value2}<br/>";25 }26 echo"<br/>";27 }28 echo"----------------------<br/>";29 }

 

3、使用list(),each(),while()遍历数组
list():用于将数组的每一个值,赋值给list函数的每一个参数。(list函数的参数,必须<=数组的元素个数);
eg:list($a,$b,$c) = [1,2,3]; --->$a=1; $b=2; $c=3;

注意
①list()在解析数组时,只解析索引数组;
②list可以通过空参数,选择性的解析数组的值;
list($a,,$b)=[1,2,3];-->$a=1;$b=3;

each():用于返回数组当前指针所在位的键值对!并将指针后移一位;
返回值:如果指针有下一位,返回一个数组。包含一个索引数组(0-键,1-值)和一个关联数组("key"-键,"value"-值);
如果指针没有下一位,返回false。

4、使用list()/each()/while()配合遍历数组※※※

1 while(list($key,$value) = each($arr)){2 echo "{$key}-->{$value}<br>";3 }4 reset($arr);

!!!数组使用each()遍历完一遍后,指针使用处于最后一位的下一位,即再用each(),始终返回false;
如果还需使用,需用reset($arr);函数,重置数组指针。

$arr = [1,2,3,4];
list($a,$b,$c,$d) = $arr;
echo "a-->{$a}
";

echo "b-->{$b}
";

echo "c-->{$c}
";

echo "d-->{$d}
";

while($a = each($arr))

①each($arr)返回数组或false;
②把数组或false赋值给$a;
③while判断$a如果是数组,继续执行下一位;
如果$a是false,终止循环。

 1 while($a = each($arr)){ 2 echo "{$a[0]}-->{$a[1]}<br>"; 3 echo "{$a['key']}-->{$a['value']}<br>"; 4 } 5  6 while(true){ 7 $a = each($arr); 8 if($a){ 9 echo "{$a[0]}-->{$a[1]}<br>";10 echo "{$a['key']}-->{$a['value']}<br>";11 }else{12 break;13 }14 }15 16 while(list($key,$value) = each($arr)){17 echo "{$key}-->{$value}<br>";18 } 
19 reset($arr);

 

5、使用数组指针遍历数组

①next:将数组指针,后移一位,并返回后一位的值,没有返回false
②prev:将数组指针,前移一位,并返回前一位的值,没有返回false
③end:将数组指针,移至最后一位,返回最后一位的值,空数组返回false
④reset:将数组指针,恢复到第一位,并返回第一位的值,空数组返回false
⑤key:返回当前指针所在位的键;
⑥current:返回当前指针所在位的键;

 1 $arr = [1,2,3,4,"one"=>5]; 2 while(true){ 3 echo key($arr); 4 echo "--"; 5 echo current($arr); 6 echo "<br>"; 7 if(!next($arr)){ 8 break; 9 }10 }11 reset($arr);12 do{13 echo key($arr);14 echo "--";15 echo current($arr);16 echo "<br>";17 }while(next($arr));18 reset($arr);

 

三、超全局数组


超全局数组,超全局变量,预定义数组,预定义变量——说的都是它。

PHP给我们提供了一组包含强大功能的超全局数组,可以在任何地方,任何作用域不需声明,直接使用!不受任何作用域限制。

PHP超全局数组

       1、服务器变量: $_SERVER
  2、环境变量:$_ENV
  3、HTTP GET变量:$_GET
  4、HHTP POST变量:$_POST
  5、request变量:$_REQUEST
  6、HTTP文件上传变量:$_FILES
  7、HTTP Cookies:$_COOKIE
  8、Session变量:$_SESSION
  9、Global变量:$GLOBALS

 

1、服务器变量: $_SERVER
var_dump($_SERVER);
echo ($_SERVER{'HTTP_USER_AGENT'});

2、环境变量:$_ENV
将系统环境变量,转变为PHP中的数组,就是$_ENV;

PHP默认是关闭此全局数组的。如果需要使用,
需修改php.ini文件中的variables_order = "GPSC",
改为variables_order = "EGPSC";

但是,修改后会有系统性能损失,港方并不推荐使用。
可以使用getenv()函数取代全局变量,取出每个系统环境变量的值。

phpinof();函数,包含了有关PHP的各种信息,其实environment板块就是系统环境的变量,可以使用getevn()函数取出其中的值;

3、HTTP GET变量:$_GET
获取前台通过get方式提交的数据

1 if(isset($_GET["sybmit"]&&isset($_GET["pwd"]))){2 if($_GET["username"]=="111"&&$_GET["pwd"]=="111"){3 echo "Get登录成功!";4 }else{5 echo "Get登录失败!";6 }7 }

 

4、HHTP POST变量:$_POST
获取前台通过post方式提交的数据

1 if(isset($_POST["sybmit"])){2 if($_POST["username"]=="111"&&$_POST["pwd"]=="111"){3 echo "POST登录成功!";4 }else{5 echo "POST登录失败!";6 }7 }

5. 요청 변수: $_REQUEST
$_GET, $_POST 및 $_COOKIE의 배열을 포함합니다
요청에 get과 post가 모두 포함되어 있으므로 get과 post 및 빈도 간에 주요 충돌이 발생할 수 있습니다. 또한 일관성이 없습니다. 따라서 요청은 사용되지 않습니다.
var_dump($_REQUEST);

6. HTTP 파일 업로드 변수: $_FILES
HTTP POST를 통해 현재 스크립트에 업로드된 프로젝트 배열입니다.
var_dump($_FILES);

7. HTTP 쿠키:$_COOKIE
페이지에서 쿠키 정보 가져오기
1 setcookie("cookie","haha");

2 $_COOKIE["헤헤"] = "헤헤";

3 var_dump($_COOKIE);


8. 세션 변수 :$_SESSION
Session에 저장된 정보를 가져옵니다.
session_start();
$_SESSION["haha"] = "하하";
var_dump($_SESSION);*/

9 전역 변수: $GLOBALS
$GLOBALS 포함 위의 8개 전역 배열을 사용하면 $GLOBALS["_SERVER"]를 통해 $_SERVER
을 얻을 수 있으며, $GLOBALS 배열에 첨자를 추가할 수도 있습니다. 함수 내부 및 외부에서 자유롭게 액세스할 수 있는 전역 변수를 만듭니다. $GLOBALS["name"] = "zhangsan";
var_dump($GLOBALS["_SERVER"]);

4. 배열 기능

 

1、返回数组所有的值,返回数组
var_dump(array_values($arr));

2、返回数组所有的键,返回数组
var_dump(array_keys($arr));

3、检测数组中是否包含某个值。返回真、假
参数:需要查询的值,数组,true(===)/false(===) 默认
var_dump(in_array("8",$arr,true));

4、交换数组中的键和值,返回新数组
var_dump(array_flip("8",$arr));

5、反转数组,返回新数组
参数:需要反转的数组
true:保留原有索引数组的下标与值的匹配。
false:只反转值,键不反转,默认
无论true/false,都不会影响关联数组,关联数组键,值永远是一对。
var_dump(array_reverse($arr,true));

6、统计数组元素个数
count($arr);

7、统计数组中,所有值出现的次数,返回一个新数组
新数组格式:键-->原数组的值(去重后的值)
        值-->原数组对应的值出现的次数。
var_dump(array_count_values($arr));

8、移出数组中重复的值!
var_dump(array_unique($arr));

9、过滤数组中的每一个值:
①不传回调函数:过滤掉所有空值(0/""/null/false/"0"/[])
②传回调函数:需要给回调函数传递一个参数,判断参数是否符合要求,如果符合,return true;否则,return false。

1 var_dump(array_filter($arr,function($num){2 if($num>4){3 return true;4 }else{5 return false;6 }7 }));


通过回调函数,对数组的每一个值,进行处理操作。(直接修改原数组,并返回bool类型的是否成功)
执行时,会给回调函数传递两个参数,分别是数组的value,key,然后可以在毁掉函数中,对值和键进行处理。
但是,牵扯到修改值的时候,必须要传递地址&!!!!
$fruits = array("d" => "lemon","a" => "orange","b" => "banana","c" => "apple");

1 var_dump(array_walk($fruits,function(&$item,$key){2 echo "{$key}-->{$item}<br>";3 $item .= $key;4 }));5 var_dump($fruits);

 

将数组的每个值交由回调函数进行映射处理
array_map():第一个参数,是一个回调函数。第二个参数起,是>=1个数组。
有几个数组,可以给回调函数传几个参数,,表示每个数组的一个value;
可以对value进行处理,处理完以后通过return返回,那么新数组的对应的值就是你return回去的值。

【array_map与array_walk的异同】
相同点都能遍历数组,通过回调函数,重新处理数组的每一个值;
不同点
①walk只能传一个数组,回调函数接收这个数组的值和键;
map可以传多个数组,回调函数接收每个数组的值;
②walk直接修改原数组,而map不修改原数组,将新数组返回;
③walk给回调函数传递一个其余参数,map只能传数组的值;
④处理方式上,walk如果需要改掉原数组的值,需在回调函数中传递地址,直接修改变量的值;
而map,是通过将新的值,用return返回,即可修改新数组的值。
$a = [1,2,3,4,5];
$b = [1,2,3,4,5];

1 var_dump(array_walk($fruits,function(&$item,$key){2 echo "{$key}-->{$item}<br>";3 $item .= $key;4 }));5 var_dump($fruits);

 

五、数组函数

sort -- 배열 정렬(오름차순)

var_dump(sort($arr));


rsort -- 배열을 역순(내림차순)으로 정렬


u sort --사용자 정의 비교 함수를 사용하여 배열의 값을 정렬합니다


asort--배열을 정렬하고 인덱스 관계를 유지합니다(연관 배열 정렬)


arsort-- 배열을 역정렬하고 인덱스 관계를 유지


uasort--배열을 정렬하고 인덱스 관계를 유지하는 사용자 정의 비교 함수


ksort--정렬 키 이름으로 배열


krsort--키 이름으로 배열을 역순으로 정렬


uksort--사용자 정의 비교 함수를 사용하여 배열의 키 이름을 정렬


natsort- - "자연 정렬" 알고리즘을 사용하여 배열 정렬


natcasesort -- "자연 정렬" 알고리즘을 사용하여 대/소문자를 구분하지 않고 배열 정렬


array_multisort -- 정렬 다중 배열 또는 다차원 배열 정렬
첫 번째 매개변수: 첫 번째 배열, 필수
두 번째 매개변수: SORT_DESC;SORT_ASC(오름차순 내림차순);
세 번째 매개변수: SORT_STRING/SORT_NUMERIC(문자열 또는 숫자 정렬)
뒤에 여러 배열
정렬 규칙: 첫 번째 배열을 먼저 정렬하고, 후속 배열은 첫 번째 배열과의 해당 관계에 따라 열별로 정렬됩니다. 배열과 여러 배열은 정렬됩니다. 그렇지 않으면 경고가 보고됩니다.

array_slice($array, $offset)

첫 번째 매개변수: 배열, 필수; 매개변수: 가로챌 위치부터 시작하여 음수는 오른쪽에서 왼쪽으로 계산하는 것을 의미합니다(배열 ps의 순서에 따라: 첨자가 아닌 연관 배열 포함)
세 번째 매개변수: 가로채는 길이, 선택 사항, 가로채기 기본적으로 끝
네 번째 매개변수: 부울 유형 매개변수, 기본값은 false, 인덱스는 재정렬됨, true는 인덱스 연관 유지
$arr1 = array_slice($arr, 2,5,TRUE);
array_splice($ offset)
반환값: 배열(삭제된 부분)


매개변수:
1 배열의 주소는 원래 배열을 수정합니다
2. 숫자부터 삭제를 시작합니다. 3. 삭제 길이, 미기재시 기본값은 끝까지
4. 미기입시 기본값은 삭제, 채우기, 삭제된 부분을 채워진 부분으로 교체;
$ arr1 = array_splice($arr, 2,5,[1 ,2,3,4]);

array_combine($keys, $values);한 배열의 값을 배열로 사용하여 배열을 만듭니다. 키 이름과 다른 배열의 값을 값으로;
array_combine ($keys'키 배열', $values'값 배열');

두 배열의 길이는 다음과 같아야 합니다. 동일합니다. 그렇지 않으면 경고가 보고됩니다


array_merge($array1);하나 이상의 배열을 병합합니다
여러 배열을 병합하고 후자의 배열을 이전 배열 뒤에 연결합니다.
여러 배열에 동일한 이름을 가진 연결된 키가 여러 개 있는 경우 후자는 이전 배열을 덮어씁니다


array_intersect($array1, $array2);두 배열이 교차됩니다
여러 배열이 교차되고 결과는 첫 번째 배열과 일치하는 키-값 연관을 유지합니다.


array_diff($array1, $array2);여러 배열의 차이 집합을 가져옵니다.
여러 배열에서 첫 번째 배열에는 포함되지만 다른 배열에는 포함되지 않은 값을 가져오고, Keep 첫 번째 배열의 키-값 연관;


배열의 마지막 값을 삭제합니다.

array_push($var); 마지막으로 하나 이상의 값을 삽입합니다. 처리 후 요소 수를 반환합니다.

array_shift();


배열의 첫 번째 값을 삭제합니다. 삭제된 값을 반환합니다.

array_unshift($ var);


배열 시작 부분에 하나 이상의 값을 삽입합니다. 처리 후 요소 수를 반환합니다.

array_rand($input);
배열에서 하나 이상의 키 이름을 무작위로 추출합니다. ! 두 번째 매개변수는 비어있어 하나를 그린다는 의미이고, 숫자 n을 전달하면 n을 그린다는 뜻입니다.

shuffle();

함수를 중단하고 재정렬
좋아~~~ 오늘의 내용을 공유해보자 우선 이 시점에서 어린 소녀는 아직 초보입니다. 정원 친구들 모두에게 조언을 부탁드리고 싶습니다. 마음에 드셨다면 좋아요를 눌러주세요~ 지원해 주셔서 감사합니다!

위 내용은 PHP 배열에 대한 실용적인 지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.