PHP 数组处理
一:PHP 定义数组:
直接定义关联数组
$capitals = array( 'Alabama' => 'Montgomery', 'Alaska' => 'Juneau', 'Arizona' => 'Phoenix' );
PHP 代码 不能再 空的位置 打字 会报错
定义数组 方式1
$cars=array("Volvo","BMW","Toyota");
定义数组方式2
$cars['ke']="Volvo"; $cars["kq"]="BMW"; $cars["kw"]="Toyota";
结果:
定义数组方式3(默认数字索引)
$cars[]="Volvo"; $cars[]="BMW"; $cars[]="Toyota";
结果:
二:PHP数组与字符串之间的转化:
1:字符串转化为数组:
<?php $str = 'one|two|three|four'; // 正数的 limit print_r(explode('|', $str, 2)); // 负数的 limit print_r(explode('|', $str, -1)); //不使用limit print_r(explode('|', $str)); ?>
结果:
2:数组转化为字符串:
<?php $arr1=array(“shu”,”zhu”,”1″); $c=implode(“##”,$arr1); echo $c; ?>
结果: shu##zhu##1
3: 数组 转化为字符串 可以使用 遍历集合 然后拼接字符串
三: PHP 数组与JSON 数组的转化:转化为的JSON值 以字符串的形式存在
普通数组转化为JSON 数组
$arr = Array('one','two', 'three'); echo json_encode($arr); 输出 ["one","two","three"]// string 格式
输出的JSON 为 字符串 格式 如下
$arr = array('one','two', 'three'); var_dump(json_encode((object)$arr));
结果:
关联数组
$arr = Array('1'=>'one','2'=>'two','3'=>'three'); echo json_encode($arr); 输出变为 {"1":"one","2":"two","3":"three"}
注意,数据格式从"[]"(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写
json_encode( (object)$arr);
或者
json_encode ( $arr, JSON_FORCE_OBJECT );
JSON数组转化为普通数组
json_decode()
通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如: $json ='{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); 结果就是生成一个PHP对象: object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } 如果想要强制生成PHP关联数组,json_decode()需要加一个参数true: $json ='{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json,true)); 结果就生成了一个关联数组: array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }
下面三种json写法都是错的,你能看出错在哪里吗?五、json_decode()的常见错误
$bad_json ="{ 'bar': 'baz' }"; $bad_json ='{ bar: "baz" }'; $bad_json ='{ "bar": "baz", }';
第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing
comma)。 对这三个字符串执行json_decode()都将返回null,并且报错。
四:PHP 处理数组:
1.str_replace() 可以替换 数组中的指定 值 返回一个新的数组(修正后的数组)
$arr = array("blue","red","green","yellow"); print_r(str_replace("red","pink",$arr));
结果:
2.array_keys() 数组中找到 指定 value值 的 key 值
$a=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander"); print_r(array_keys($a,"Highlander"));
结果:
3. array_map() 数组中的每个值都运行指定函数 并且返回 新的数组。
<?php function myfunction($v) { if ($v==="Dog") { return "Fido"; } return $v; } $a=array("Horse","Dog","Cat"); print_r(array_map("myfunction",$a)); ?>
结果:
4.array_pop($a); 这里 注意 : 原来的 数组 已经改变 删除数组最后的 一位
<?php $a=array("red","green","blue"); array_pop($a); print_r($a); ?>
结果:
array_push()添加数组最后一位
<?php $a=array("red","green"); array_push($a,"blue","yellow"); print_r($a); ?>
结果:
5. array_shift($a); 开头 删除
<?php $a=array("a"=>"red","b"=>"green","c"=>"blue"); echo array_shift($a); print_r ($a); ?>
结果:
array_unshift($a); 开头 添加
<?php $a=array("a"=>"red","b"=>"green"); array_unshift($a,"blue"); print_r($a); ?>
结果:
6.输出 key 和 value 值
<?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); foreach($age as $x=>$x_value) { echo "Key=" . $x . ", Value=" . $x_value; echo "<br>"; } ?>
7.修改 数组值 【foreach 不能 直接修改 数组的值; 如果便利的话 只能使用 for 循环】
注意加引号
<?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); echo "Peter is " . $age['Peter'] . " years old."; ?>
8.PHP数组 去重
<?php $a=array("a"=>"red","b"=>"green","c"=>"red"); print_r(array_unique($a)); ?>
9. 某个值是否存在某个 值
<?php $people = array("Peter", "Joe", "Glenn", "Cleveland"); if (in_array("Glenn", $people)) { echo "Match found"; } else { echo "Match not found"; } ?>
10.合并数组 array_merge() 只可以合并数组类型的参数 不过可以使用强制转换 来合并 字符串和数组
<?php $array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result); ?>
结果:
把字符串和数组 合并
<?php $beginning = 'foo'; $end = array(1 => 'bar'); $result = array_merge((array)$beginning, (array)$end); print_r($result); ?>
输出: