Php数组
数组array, 变量要加$
-
注意: value没有限制, 但是, key必须是整数或者字符串.
-
最通常的数组赋值方法:
//我们日常使用的数组初始化方式. $arr= [ "foo" => "bar", "bar" => "foo", 4=> 'jan', //下标4, 361,//下标5, 下一个元素的下标取决于当前最大的下标. ];
-
最常用的遍历方法
foreach($array as $item){ echo $item; } foreach($array as $key=>$value){} while($item=each($array)){} while(list($key, $value)=each($array)){} //下面两个方法直接反复使用也是可以遍历的. $fruit = array_shift($stack); $each=each($stack);
-
竟然有三种赋值方法
// 前面这三种可能会引起问题, 如果这个变量曾经定义过的话. // 因为string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改,比如 $str[42]。可以把 string 当成字符组成的 array // 第一种, 直接赋值. $xxx[]="hhh"; //key 0 $xxx[]="hhhh"; // key 1 $xxx[]="hhhhh"; // key 2 // 第二种, 直接赋值, 并且指定索引下标 $xx[1]="hhhh"; //这样就从1开始了. $xx[2]="hhhhh"; $x[] = 4; // key will be 3 // 或者创建一个关联数组, $x['lh0']="hhh"; $x['mh1']="hhhh"; $x['hh2']="hhhhh"; $x[] = 4; // key will be 0 // 用array的唠叨丑陋模式 $yxxx=array( 'hhh', //key 0 'hhhh', //key 1 'hhhhh' //key 2 ); $xzxx=array( 'lh'=> 'hhh', // =>这么神奇的符号, 就这么一个作用哈. 'mh'=>'hhhh', 'hh'=> 'hhhhh', 4 , // key will be 0 '6'=> 'xxxx', //key 6 312, //key 7, 因为之前最大的key是6 ); // 自 PHP 5.4 起 有了新的不唠叨格式, 貌似这个是最不唠叨格式. $arr= [ "foo" => "bar", "bar" => "foo", ]; //举个最全的例子: $switching = [ 10, // key = 0 5 => 6, 3 => 7, 'a' => 4, 11, // key = 6 (maximum of integer-indices was 5) '8' => 2, // key = 8 (integer!) '02' => 77, // key = '02' 0 => 12 // the value 10 will be overwritten by 12 ];
-
关于赋值, 添加, 删除, 就比较有趣了.
$array = array( //key只能是整数或者字符串, 并且都会被尽量转换为整形. '1'和1对于key而言是一样的. 1 => "a", "1" => "b", 1.5 => "c", true => "d", ); var_dump($array);//因为类型强制转换, 所以最终这个数组就是 $array = [ 1 => 'd'];// unset() 函数允许删除数组中的某个键。但要注意数组将不会重建索引。如果需要删除后重建索引,可以用 array_values() 函数。 $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 // 创建一个简单的数组 $array = array(1, 2, 3, 4, 5); print_r($array); // 现在删除其中的所有元素,但保持数组本身不变: foreach ($array as $i => $value) { // foreach 控制结构是专门用于数组的。它提供了一个简单的方法来遍历数组。 unset($array[$i]); } print_r($array); // 添加一个单元(注意新的键名是 5,而不是你可能以为的 0) $array[] = 6; print_r($array); // 重新索引: $array = array_values($array); $array[] = 7; print_r($array);
-
可以传引用
$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
-
数组的相关函数
$a; # 这是一个数组. foreach($a as $k=>$v){ $k; # 就是数组中某一项的key $v; # 就是某一项的值. } count($a); # $a里面有多少项. each($a); # 拿出一项, 指针向前移动一格. reset($a); # 指针回到开头. while(list($k, $v)=each($a)){ } # 赋值. 这个和foreach几乎一样啊. $_GET["name"]; # 拿到http get方法传递的name值. $_POST["name"]; # 和get类似, post方法.
数组变字符串
- 把array变成字符串, 其实很简单 json_encode就可以了.
- print_r($t, true), 第二个参数为true, 这个函数就会返回$t的字符串.
去除重复
两个办法:
-
array_unique(), 移除重复, 但是, 对于大数组会比较慢.
-
array_flip(), 交换建和值, 然后, 键不能重复, 因此, 就去除了重复.
/* 创建一个包含重复值的,一共四个元素的数组 */ $array = array('green','blue','orange','blue'); /* 翻转数组,你将会得到唯一键值的数组 array('green'=>0,'blue'=>1,'orange'=>2); */ $array = array_flip($array); /* 然后再翻转一次,将键和值重新放置,然后得到数组:array(0=>'green',1=>'blue',2=>'orange'); */ $array = array_flip($array); //此时数组的数字索引有可能是断的. /* 使用array_merge()函数修复数字键值*/ $array = array_merge($array); //这一步不是必须的, 取决于两点: 1. 你的数组是数字键值吗? 2. 连续的数字键值对你有意义吗? 如果是多维数组的一个子组, 那么原始的断的索引更有意义, 比如正则preg_match_all的结果数组, 就不应该做这一步. 因为这一步会导致结果的混乱. //去重之后可以看看数组的尺寸是否着呢的降低了. echo count($array);
-
访问元素
//方括号和花括号可以互换使用来访问数组单元, 例如 $arr[42]; $arr{42};// 效果相同。 function getArray() { return array(1, 2, 3); } $secondElement = getArray()[1];// on PHP 5.4 $tmp = getArray(); // 老办法 $secondElement = $tmp[1]; list(, $secondElement) = getArray(); // 这样也行 echo "Bad: " . $array['$i'] . "\n"; //这里错在给变量加单引号, 导致不认识这个变量. echo "Good: " . $array[$i] . "\n"; echo "Bad: {$array['$i']}\n"; echo "Good: {$array[$i]}\n"; //这个花括号的作用和.连接字符串是一样的. 1. 表示{}里面的是一个变量 ,执行时按照变量来处理; 2. 在字符串中引用变量使用的特殊包括方式,这样就可以不使用.运算符,从而减少代码的输入量了; 3. 防止变量名和后面的字符串连在一起。
each方法的坑
$country = each($mifengwo);
key($country); //这个方法返回的值就不是本来数组元素的键值了. 而是数字序号了. 因为each之后变成了这个样子:
array(4) {
[1]=>
string(5) "10183"
["value"]=>
string(5) "10183"
[0]=>
string(5) "japan"
["key"]=>
string(5) "japan"
}
//因此需要下面这个方法来取键值.
$country['key']
或者直接:
list($key, $value)=each($array)