php中的方法是真的多,多到可能你干了几年也没用过。很多时候每当自己绞尽脑汁封装一个方法后才发现,php已经有封装好的方法了!有的时候只需要两个函数,几行代码就能搞定。而且,正因php底层是c编写的,使用php的方法远比自己写的性能要好!
根据二维数组中的某一个字段进行排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?php
$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', ) ); $first_names = array_column($records, 'first_name'); array_multisort($first_names,SORT_DESC,$records); print_r($records); ?>
|
以上例程会输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| Array ( [0] => Array ( [id] => 3245 [first_name] => Sally [last_name] => Smith )
[1] => Array ( [id] => 5623 [first_name] => Peter [last_name] => Doe )
[2] => Array ( [id] => 2135 [first_name] => John [last_name] => Doe )
[3] => Array ( [id] => 5342 [first_name] => Jane [last_name] => Jones )
)
|
数组去重
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array
中同一个值的第一个出现的键名会被保留。
1 2 3 4 5
| <?php $input = array(4, "4", "3", 4, 3, "3"); $result = array_unique($input); var_dump($result); ?>
|
以上例程会输出:
1 2 3 4
| array(2) { [0] => int(4) [2] => string(1) "3" }
|
如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃。
1 2 3 4 5 6
| <?php $input = array("a" => 1, "b" => 1, "c" => 2); $flipped = array_flip($input);
print_r($flipped); ?>
|
以上例程会输出:
1 2 3 4 5
| Array ( [1] => b [2] => c )
|
二维数组去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
function uniquArr($array,$search,$is_start=false) { $result = array(); foreach ($array as $k => $val) { $code = false; foreach ($result as $_k => $_val) { if ($_val[$search] == $val[$search]) { $code = true; if($is_start) { $result[$_k] = $val; } break; } } if (!$code) { $result[] = $val; } } return $result; }
|
删除一维数组中某一个值元素的操作方法
1 2 3 4 5 6 7 8 9 10 11 12
| <?php $arr = array( '0' => '321', '1' => '322', '2' => '323', '3' => '324', '4' => '325', '5' => '326', );
$arr = array_merge(array_diff($arr, array(321))); print_r($arr);
|
以上例程会输出:
1 2 3 4 5 6 7 8
| Array ( [0] => 322 [1] => 323 [2] => 324 [3] => 325 [4] => 326 )
|
模糊搜索数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?php $arr = [ ["id"=>1,"name"=>"张小明"], ["id"=>2,"name"=>"李小强"], ["id"=>3,"name"=>"王二狗"], ["id"=>4,"name"=>"王德法"], ];
function arrlikes($data,$key,$info) { $arr = array(); foreach($data as $k=>$v ){ if (strstr( $v[$info] , $key ) !== false ){ array_push($arr, $v); } } return $arr; } print_r(arrlikes($arr,'王',"name"));
|
以上例程会输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Array ( [0] => Array ( [id] => 3 [name] => 王二狗 )
[1] => Array ( [id] => 4 [name] => 王德法 ) )
|
多维数组字符替换
公司有一个需求:需要把APP做成 汉语+维吾尔语
。
思路为:因为用户输入的数据存入数据库后定型,所以只好在接口返回数据前进行过滤替换。(利用es进行数据存储)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
function strReplace(&$array, $search, $replace) { $array = str_replace($search, $replace, $array); if (is_array($array)) { foreach ($array as $key => $val) { if (is_array($val)) { strReplace($array[$key], $search, $replace); } } } }
$arr = array( 'welcome' => '欢迎', 'arr' => [ 'hello' => '你好', 'welcome' => '欢迎' ] strReplace($arr, '欢迎', "قارشى ئالىمىز"); var_dump($arr);
|
以上例程会输出:
1 2 3 4 5 6 7 8 9 10 11
| array(2) { ["welcome"]=> string(25) "قارشى ئالىمىز" ["arr"]=> array(2) { ["hello"]=> string(6) "你好" ["welcome"]=> string(25) "قارشى ئالىمىز" } }
|