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
// Array representing a possible record set returned from a database
$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
/**
* 二维数组去重
* @param $array 需要去重的数组
* @param $search 用替换字符串替换所有出现的搜索字符串
* @param $is_end 是否以最后一个为准
*/
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"=>"王德法"],
];
/**
* 模糊搜索数组
* @param array $data 数组
* @param string $key 匹配字符串
* @param string $info 字段
* @return array
*/
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
/**
* 多维数组字符替换
* @param $array 需要替换的数组
* @param $search 用替换字符串替换所有出现的搜索字符串
* @param $replace 替换已找到搜索的替换值
*/
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) "قارشى ئالىمىز"
}
}