php数组原型
php数组其实是一种有序映射(或者说是有序字典)
<?php
/**
* @author:Noah
* noahlee0918@gmail.com
* @param $arr
* 使用each循环数组
*/
function eachArr($arr){
reset($arr);
while(list($key,$val) = each($arr)){
echo $key . '=>' . $val.PHP_EOL;
}
}
/**
* @author:Noah
* noahlee0918@gmail.com
* @param $arr
* @param $val
* @return mixed
* 使用数组指针取出当前值的下一个值,环形取
*/
function getNextValue($arr,$val){
while($row = current($arr)){
if($row == $val){
if(next($arr) == false){
return $val . '没有下一个值';
}else{
return $val . '下一个值是' .current($arr);
}
}
next($arr);
}
}
$listArr = [
'1232','2456','7789','8976',
'5678','3456','2347','9876',
'3451','7744','2212','3214',
];
//eachArr($listArr);
$c_val = '3456';
$ret = getNextValue($listArr,'3456');
echo($ret);
##### 数组函数
//array_change_key_case将数组的所有键名修改为大写或者小写
$arr = array('aDc'=>1212,'aarrfggD'=>2323);
print_r(array_change_key_case($arr,CASE_UPPER));
print_r(array_change_key_case($arr,CASE_LOWER));
//array_chunk将一个数组分割成多个,第三个参数默认false,为true表示保留原来的键名
$arr_a = array('a','c','d','e','f','g','h');
print_r(array_chunk($arr_a,2,true));
//array_column 返回数组指定的一列,第三个参数可选,填写表示作为返回列的索引
$records = array(
array('id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe'),
array('id' => 3245,'first_name' => 'Sally', 'last_name' => 'Smith'),
array('id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones'),
array('id' => 5623,'first_name' => 'Peter', 'last_name' => 'Doe' )
);
print_r(array_column($records,'first_name'));
print_r(array_column($records,null,'id'));
print_r(array_column($records,'first_name','id'));
//array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
$arr_a_1 = array('zhang','li','wang');
$arr_a_2 = array('san','si','wu');
print_r(array_combine($arr_a_1,$arr_a_2));
//array_count_values 统计数组中所有的值
$arr_b = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($arr_b));
//array_diff_assoc 带索引检查计算数组的差集
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", 0=>"red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
//array_diff_key 使用键名计算数组的差集
$result = array_diff_key($array1, $array2);
print_r($result);
//array_diff_uassoc 用用户提供的回调函数做索引检查来计算数组的差集
function diff_c($a,$b){
if ($a === $b){
return 0;
}
return ($a > $b) ? 1 : -1;
}
$arr1 = array('a'=>12121,'b'=>2323,'red');
$arr2 = array('a'=>12121,2323,'red');
print_r(array_diff_uassoc($arr1,$arr2,"diff_c"));
//array_diff 计算数组的差集
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
//array_fill_keys使用指定的键和值填充数组
$arr1 = array('aaa'=>124,'ccc'=>333,'ddd'=>222,'hhh'=>5656);
$arr2 = array('eee'=>2323,'fff'=>3434,'ggg'=>4545);
print_r(array_fill_keys($arr1,$arr2));
// array_fill 用给定的值填充数组 第一个参数是第一个索引,若是负数,那它后一个索引从0开始;第二个为数量,第三个为值
$arr = array_fill(0,5,'a');
print_r($arr);
//array_filter用回调函数过滤数组中的单元
$arr = [1,2,3,4,5,6,7,8,9];
function odd($n){
return $n & 1; //& :按位"与"运算,只有奇数(odd)才可以返回1,否则返回0
}
function even($n){
return !($n & 1);//数组中除了奇数,剩下的就是偶数了
}
$arr1 = array_filter($arr, 'odd');
$arr2 = array_filter($arr, 'even');
print_r($arr1);
print_r($arr2);
//array_flip交换数组中的键和值
$arr1 = array('ddd'=>1,'fff','ty'=>'eeee');
print_r(array_flip($arr1));
//array_intersect_assoc 带索引检查计算数组的交集
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
//array_intersect_key 使用键名比较计算数组的交集
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
print_r(array_intersect_key($array1, $array2));
//array_intersect_uassoc 带索引检查计算数组的交集,用回调函数比较索引
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
print_r(array_intersect_uassoc($array1, $array2, "strcasecmp"));
//array_intersect_ukey 用回调函数比较键名来计算数组的交集
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
print_r(array_intersect_ukey($array1, $array2,'key_compare_func'));
//array_intersect计算两个数组的交际
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
print_r(array_intersect($array1,$array2));
//array_key_exists 检查数组里是否有指定的键名或索引
$array1 = array("a" => "green", "red", "blue",'hh'=>999);
var_dump(array_key_exists('a',$array1));
//array_key_first 获取数组的第一个键
$array = ['abc' => 1, 'bcd' => 2, 'cde' => 3];
print_r(array_key_first($array));
//array_keys返回数组中部分的或所有的键名
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
$array1 = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array1, "blue"));
//array_map 为数组的每个元素应用回调函数
function sumc($n){
return ($n * $n * $n);
}
$arr = [1,2,3,4];
$a = array_map('sumc',$arr);
print_r($a);