詳しくはphp(六)配列

13921 ワード

一、配列の概要
1.1配列は複合型
1.2配列に任意の長さのデータを格納してもよいし、任意の種類のデータを格納してもよい
二、配列のタイプ
2.1索引配列:下付きは索引として順次整数
<?php
	$user[0] = 1;
	$user[1] = "zhangsan";
	$user[2] = "[email protected]";
	
	echo '<pre>';
	print_r($user);
	echo '</pre>';
?>

2.2関連配列:インデックスとして文字列が下付き
<?php
	$user["id"] = 1;
	$user["name"] = "zhangsan";
	$user["email"] = "[email protected]";
	
	echo '<pre>';
	print_r($user);
	echo '</pre>';
	$user["name"] = "lisi";
	echo $user["name"];
?>

三、配列の多種の宣言方式
3.1配列要素に直接値を割り当てる
a.インデックスの下付き文字が値を与えない場合、0から順にインデックスb.インデックスの下付き文字が与えられると、次は最大から1増加する
c.後に前の下付き文字が現れた場合、賦値が前の要素にd.混合宣言を再賦値した場合、インデックスと関連付けは相互に影響しない(インデックスの下付き文字の宣言に影響しない)
3.2 array()関数の使用
a.デフォルトはインデックス配列
b.関連配列と索引配列に下付き文字を指定する場合は、キー=>値c.複数のメンバーを使用する前に","分割
<?php
	$user1 = array (1, "zhsangsan", 10, "nan", "[email protected]");
	echo '<pre>';
	print_r($user1);
	echo '</pre>';
	
	/**
	 Array(
	    [0] => 1
	    [1] => zhsangsan
	    [2] => 10
	    [3] => nan
	    [4] => [email protected]
	 )
	 */
	
	$user2 = array("id"=>1, "name"=>"zhsangsan", "age"=>10, 100=>"nan", "[email protected]");
	echo '<pre>';
	print_r($user2);
	echo '</pre>';
	
	/**
	 Array(
	    [id] => 1
	    [name] => zhsangsan
	    [age] => 10
	    [100] => nan
	    [101] => [email protected]
	 )
	 */
?>

重要なポイント:2 D配列2 Dはいれつ
<?php
	$info=array(
		"user"=>array(
				array(1, "zansan", 10, "nan"),
				array(2, "lisi", 20, "nv")
		 )
	);
	echo $info["user"][1][1]; // lisi
	echo '<pre>';
	print_r($info);
	echo '</pre>';
	
	/**
	 	Array
	 	(
		    [user] => Array
		        (
		            [0] => Array
		                (
		                    [0] => 1
		                    [1] => zansan
		                    [2] => 10
		                    [3] => nan
		                )
		
		            [1] => Array
		                (
		                    [0] => 2
		                    [1] => lisi
		                    [2] => 20
		                    [3] => nv
		                )
		
		        )
		
		)
	 */
?>

四、配列の遍歴
4.1 for文ループを使用する(推奨しない)
制限:配列はインデックス配列でなければなりません.また、下付きは連続でなければなりません(ただし、インデックス配列の下付きは不連続であり、配列は関連配列である可能性があります).
<?php
  	$user = array(1, "zhasna", "[email protected]");
	for($i = 0; $i < count($user); $i++){
		echo "\$user[{$i}]=".$user[$i]."<br>";
	}
	
	/**
	 	$user[0]=1
		$user[1]=zhasna
		$user[2][email protected]
	 */
?>

4.2 foreach文を使用したループ(強く推奨)
ループ回数は配列の要素の個数によって決定され、ループごとに配列内の要素が後の変数にそれぞれ割り当てられます.
<?php
    $user=array(1, "name"=>"zhasna", "age"=>40, 100=>"nan", "[email protected]");
    foreach($user as $key => $val){   // $var       , $key     
  		echo $key." =====> ".$val."<br>";
    }
    
    /*
     	0 =====> 1
		name =====> zhasna
		age =====> 40
		100 =====> nan
		101 =====> [email protected]
     */
    
    foreach($user as $val){   //   key   ,     $user  
  		echo $val."<br>";
    }
    
    /*
     	1
     	zhasna
		40
		nan
		[email protected]
     */
?>

4.3 while(),list(),each()の組合せループを使用する(推奨しない)
each()関数:
*パラメータとして配列が必要
*返されるのも配列です
*返された配列は0,1,key,valueの4つの下付き文字で、0とkeyの下付き文字は現在の配列要素のキーで、1とvalueの下付き文字は現在の配列要素の値です
*デフォルトの現在の要素が最初の要素です
*1回実行するたびに現在の要素が後方に移動します.
*最後にこの関数を実行した場合はfalseを返します.
<?php
	$user = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");
	
	while($arr = each($user)){
		// echo $arr[0]."==>".$arr[1]."<br>";
		echo $arr["key"]." ----> ".$arr["value"]."<br>";
	}
	
	/**
	 	id ----> 1
		name ----> zhangsan
		age ----> 10
		sex ----> nan
	 */
?>

List()関数:
      * list()=array(); この関数に配列を割り当てる必要があります
*配列内の要素の数はlist()関数のパラメータの数と同じです*配列内の各要素の値はlist()関数の各パラメータに割り当てられ、list()は各パラメータを変数に変換します
*list()はインデックス配列のみ受信できます
<?php
	list($name, $age, $sex) = array("zansan", 10, "nnnnn");
	echo $name."<br>";
	echo $age."<br>";  // list             
	echo $sex."<br>";  //      name  ,     list(, $age, $sex)
	/*
	 	zansan
		10
		nnnnn
	 */
	 
	$user1 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");
	list($key, $value) = each($user1);  // Array ( [1] => 1  [0] => id  ) 
	echo $key." --> ".$value;
	/*
	 	id --> 1
	 */
	
	$user2 = array("id"=>1, "name"=>"zhangsan", "age"=>10, "sex"=>"nan");
	while(list($key, $value) = each($user2)){
		echo $key." ==> ".$value."<br>";
	}
	/*
	 	name ==> zhangsan
		age ==> 10
		sex ==> nan
	 */
?>

五、事前定義配列
自動グローバル変数--スーパーグローバル配列1.WEBサーバ,クライアント,実行環境,ユーザから入力データが含まれている.事前定義配列は、グローバル範囲で自動的に有効になります.例えば、globalを宣言することなく、関数でこれらの配列を使用することもできます.ユーザーはこれらの配列をカスタマイズできませんが、これらのデータ操作は私たちがカスタマイズした配列操作と同じです.
 *   $_GET//URLリクエストを介してスクリプトにコミットされる変数*$POST//HTTP POSTメソッドを介してスクリプトにコミットされる変数*$REQUEST//GET、POST、COOKIEメカニズムを介してスクリプトの変数にコミットされるため、この配列は信頼できず、できるだけ*$_を使用しないFILES//HTTP POSTファイルを介してスクリプトにコミットされる変数*$COOKIE      // *   $_SESSION  // *   $_ENV//実行環境スクリプトにコミットされた変数*$SERVER//変数はWEBサーバで設定されているか、現在のスクリプトの実行環境に直接関連付けられている*$GLOBALS//現在のスクリプトで有効な変数がすべてここにある限り、配列キー名はグローバル変数の名前です
<?php
	print_r($_GET);
	echo $_GET["username"]."<br>"; //   get  url  username
	
	print_r($_POST);
	echo $_POST["uname"]."<br>"; //   post       uname
	
	print_r($_REQUEST);
	echo $_ENV["OS"]."<br>";  //   key 'OS' value
	echo $_SERVER["DOCUMENT_ROOT"]."<br>";  //   key 'DOCUMENT_ROOT' value
	
	$a = 100; //         $GLOBALS 
	function demo(){
		echo $GLOBALS["a"]."<br>";  //     global       
	}
	
	demo();
?>

<form action="demo.php" method="post">   <!-- post      ,      $_POST  -->
	username: <input type="text" name="uname"><br>
	password: <input type="password" name="pass"><br>
	<input type="submit" value="login"> <br>
</form>

<a href="demo.php?username=zhangsan">this is a $_GET test</a> <!-- get      ,      $_GET  -->

六、配列相関関数
1.配列キー/値操作に関する関数*1.1 array_values()は、input配列のすべての値を返し、数値インデックスを確立します.
<?php
	$array = array (
		"size" => "XL",
		"color" => "gold"
	);
	print_r(array_values($array));
	
/*
	Array
	(
	    [0] => XL
	    [1] => gold
	)
 */
?> 

 *  1.2  array_keys()は配列内のすべてのキー名を返します
<?php
	$array = array (
		0 => 100,
		"color" => "red"
	);
	print_r(array_keys($array));
	
/*
 	Array(
	    [0] => 0
	    [1] => color
	)
 */
?>

 *  1.3  in_Array()配列に値があるかどうかをチェック
<?php
	$os = array ("Mac", "NT", "Irix", "Linux");
	if (in_array("Irix", $os)) {
		echo "Got Irix";
	}
	if (in_array("mac", $os)) {
		echo "Got mac";
	}
?>

 *  1.4  array_key_existsは、与えられたkeyが配列中に存在する場合にTRUEを返す
<?php
	$search_array = array (
		'first' => 1,
		'second' => 4
	);
	if (array_key_exists('first', $search_array)) {
		echo "The 'first' element is in the array";
	}
?>

 *  1.5  array_flip交換配列のキーと値
<?php
	$trans = array (
		"a" => 1,
		"b" => 1,
		"c" => 2
	);
	$trans = array_flip($trans);
	print_r($trans);  // Array ( [1] => b [2] => c ) 
	//            ,             ,         
?> 

 *  1.
6  array_reverseは、セルの順序が逆の配列を返します.
<?php
	$input = array (
		"php",
		4.0,
		array (
			"green",
			"red"
		)
	);
	$result = array_reverse($input);
	print_r($result);
	// Array ( [0] => Array ( [0] => green [1] => red ) [1] => 4 [2] => php ) 
?> 

2.統計配列要素の個数と一意性
 *  2.
1  count()    sizeof();
<?php
	$a[0] = 1;
	$a[1] = 3;
	$a[2] = 5;
	$result = count($a);
	print_r($result);  // 3
?> 

 *  2.
2  array_count_values統計配列内のすべての値が現れる回数
<?php
	$array = array (
		1,
		"hello",
		1,
		"world",
		"hello"
	);
	echo "<pre>";
	print_r(array_count_values($array));
	echo "</pre>";
	
/*
 	Array
	(
	    [1] => 2
	    [hello] => 2
	    [world] => 1
	)
 */

 *  2.
3  array_Unique配列から重複する値を除去する
<?php
	$input = array("a" => "green", "red", "b" => "green", "blue", "red");
	$result = array_unique ($input);
	echo "<pre>";
	print_r($result);
	echo "</pre>";
	
/*
 	Array
	(
	    [a] => green
	    [0] => red
	    [1] => blue
	)
 */
?> 

3.コールバック関数を使用して配列の関数を処理する
 *  3.1  array_フィルタ()配列内のセルをコールバック関数でフィルタする
<?php
	function odd($var) {
		// returns whether the input integer is odd
		return ($var & 1);
	}
	
	$array = array (
		"a" => 1,
		"b" => 2,
		"c" => 3
	);
	
	echo "<pre>";
	print_r(array_filter($array, "odd"));
	echo "</pre>";
	
/*
 	Array
	(
	    [a] => 1
	    [c] => 3
	)
 */
?> 

 *  3.2  array_walk()ユーザカスタム関数を使用して配列内の各要素をコールバック処理する
<?php
	$fruits = array (
		"d" => "lemon",
		"a" => "orange",
		"b" => "banana",
		"c" => "apple"
	);
	
	// funcname       。array         ,       。
	function test_print($item, $key) {
		echo " $key =>  $item <br />
"; } array_walk($fruits, 'test_print'); /* d => lemon a => orange b => banana c => apple */ ?>

 *  3.3  array_map()コールバック関数を所与の配列のセルに作用させる
<?php
	function cube($n){
	    return($n * $n * $n);
	}
	
	$a = array(1, 2, 3, 4, 5);
	$b = array_map ("cube", $a);
	print_r($b);
	// Array ([0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125) 
?> 

4.配列のソート関数*4.1 sort()rsort()簡単な配列ソート
<?php
	$fruits  = array("lemon", "orange", "banana", "apple");
	sort($fruits);
	foreach ($fruits as $key => $val) {
	    echo  "fruits[" . $key . "] = " . $val . "<br>";
	}
	
/*
 	fruits[0] = apple
	fruits[1] = banana
	fruits[2] = lemon
	fruits[3] = orange
 */
?>
 *  4.2
ksort()krsort()キー名に基づいて配列をソート
<?php
	$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
	ksort($fruits);
	foreach ($fruits as $key => $val){
	    echo "$key = $val <br>";
	}
	
/*
	 a = orange
	 b = banana
	 c = apple
	 d = lemon 
 */
?>  
 *  4.3
asort()arsort()要素の値に基づいて配列をソート
<?php
	$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
	asort($fruits);
	foreach ($fruits as $key => $val){
	    echo "$key = $val <br>";
	}
	
/*
	c = apple
	b = banana
	d = lemon
	a = orange 
 */
?> 
 *  4.4
 
natsort()natcasesort()自然数ソート法に従って配列をソート
<?php
	$array = array("img12.png", "img10.png", "img2.png", "img1.png");
	asort($array);
	echo "<pre>";
	print_r($array);
	echo "</pre>";
	
/*
	Array
	(
	    [3] => img1.png
	    [1] => img10.png
	    [0] => img12.png
	    [2] => img2.png
	)
 */
?>
 *  4.5
usort()uasort()uksort()ユーザカスタムルールに従って配列をソート
<?php
	function cmp($a, $b){
	    if($a == $b){
	        return 0;
	    }
	    return ($a < $b) ? - 1 : 1;
	}
	$a = array(3, 2, 5, 6, 1);
	usort($a , "cmp");
	foreach ($a as $key => $value) {
	    echo "$key : $value <br>" ;
	}
	
/*
	0 : 1
	1 : 2
	2 : 3
	3 : 5
	4 : 6 
 */
 ?> 
 *  4.6
array_Multisortは一度に複数の配列を並べ替えます
5.分割、結合、分割、結合の配列関数*5.1 array_slice()配列から*5.2 array_を取り出しますsplice()配列の一部を除去し、*5.3 array_の代わりに他の値を使用します.combine()は、1つの配列の値をキー名、別の配列の値を値*5.4 array_とする配列を作成します.merge()1つ以上の配列をマージ*5.5 array_intersect()計算配列の交差*5.6 array_diff()は配列の差セット6を計算する.配列とデータ構造の関数*6.1 array_push()   array_pop()データ実装スタック*6.2 array_unshift()   array_shift()unset()使用キュー7.その他のデータ操作に関する関数*7.1 array_rand()配列から1つ以上のセルをランダムに取り出す*7.2 shuffle()配列を乱す*7.3 array_sum()計算配列内のすべての値の和*7.4 range()指定範囲単位を含む配列を確立する