PHP 陣列操作的 10 個實用技巧

整理了些 PHP開發 在 工作或解題上可能會用到的實用函數,

依需求可大致區分為以下類別,

是否存在特定資料

二維陣列 使用 array_key_exists()

1
2
3
$example = ["zh"=>0,"en"=>1];
$check = array_key_exists("zh",$example);
-> 存在 true , 反之 false

一維陣列 使用 in_array()

1
2
3
4
$example = ["zh","en"];
$check = in_array("zh",$example,true);
-> 存在 true , 反之 false
->加上第三參數(選填)會加上 變數型態 判斷

提取特定欄位資料

使用 array_column()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$example = [
"zh"=>[
"id" => 1,
"name"=>"中文",
"code_count"=>10,
],
"en"=>[
"id" => 2,
"name"=>"英文",
"code_count"=>25,
],
];
$result = array_column($example ,"code_count");
-> 轉換成 $result = [10,25]

$result = array_column($example ,"code_count","id");
-> 設置 id欄位當索引 轉換成 $result = [ [1]=>10, [2]=>25]

索引跟資料翻轉顯示

使用 array_flip()

1
2
3
4
5
6
7
$example = ["zh","en"];
$result = array_flip($example);
-> 轉換成 $result = [ ["zh"]=>0, ["en"]=>1]

$example = ["zh"=>2,"cn"=>2,"en"=>3];
$result = array_flip($example);
-> 存在相同value取後,轉換成 $result = [ [2]=>"cn", [3]=>"en"]

計算資料存在數量

使用 array_count_values()

1
2
3
4
5
6
7
8
9
$example = ["zh",2,"cn",2,"en",3,"cn"];
$result = array_count_values(array);
-> 轉換成 $result = [
["zh"]=> 1,
[2]=> 2,
["cn"]=> 2,
["en"]=> 1,
[3]=> 1,
]

填充多個預設值

使用 array_fill()

1
2
3

$exmaple = array_fill(0, 5, "fill");
-> 從 0 開始產生 5 個值, $result = ["fill","fill","fill","fill","fill"]

特定位置移除/拼接數值

名稱上容易混淆的就放一起講

**array_splice(拼接)**,移除陣列特定位置數值 並用 其他數值 取代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
array_splice(陣列,偏移,移除長度(選填),取代數值(選填))

$example = ["zh","en","cn","vn"];

$result = array_splice($example,2);
-> 不存在移除長度時 偏移= 取得個數 , $result = ["zh","en"]

$result = array_splice($example,2,1);
-> 從 位置2 的開始移除 1 個數值, $result = ["zh","en","vn"]

$result = array_splice($example,-2,2);
-> 從 倒數位置2 的開始移除 2 個數值, $result = ["zh","en"]

$result = array_splice($example,2,count($example),"remove");
-> 從 位置2 的開始移除數值(超過可用數=全砍)並替換字串 $result = ["zh","en","remove"]

$result = array_splice($example,2,count($example),["remove","remove2"]);
-> 從 位置2 的開始移除數值並替換字串 $result = ["zh","en","remove","remove2"]

**array_slice(移除)**,切除陣列特定位置數值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
array_slice(陣列,偏移,移除長度(選填),是否保留原本陣列key(選填))

$example = ["zh","en","cn","vn"];

$result = array_slice($example,2);
-> 不存在移除長度時 偏移= 位置0 開始的移除個數, $result = ["cn","vn"]

$result = array_slice($example,-2,1);
-> 在 倒數第2位置 切除 1 個數值, $result = ["cn"]

$result = array_slice($example, 0,-2);
-> 在 位置0 開始,切除倒數 2 個數值, $result = ["zh","en"]

$result = array_slice($example,2,2,true);
-> 在 第2位置 切除 2 個數值,保留原先索引, $result = [[2]=>"cn",[3]=>"vn"]

物件資料轉陣列

使用 json_decode()

1
2
3
4
5
6
7
8
9
$example = '{
"id":"1",
"name":"English",
"status":"1"
}';
$result = json_decode($example,true);
-> $result = ["id"=>"1","name"=>"English","status"=>"1"]

// json_encode($arr) 陣列轉物件資料

合併多個陣列資料

只有兩個,使用 array_combine()

1
2
3
4
5
$example = ["zh","en","cn","vn"];
$example_2 = ["1",2,3.5,true];

$result = array_combine($example,$example_2);
-> 前陣列當key後陣列當value $result = ["zh"=>"1","en"=>2,"cn"=>3.5,"vn"=>true]

多個陣列,使用 array_merge()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$example = ["zh"=>"tw","en","cn","vn"];
$example_2 = ["1",2,3.5,true,"name"=>"中文"];
$example_3 = [6];
$result = array_merge($example,$example_2,$example_3);
-> $result = [
["zh"] =>"tw",
[0] => "en",
[1] => "cn",
[2] => "vn",
[3] => "1",
[4] => 2,
[5] => 3.5,
[6] => true,
["name"] => "中文",
[7] => 6
]

取得索引或資料的數值

要取得 資料,使用 array_values()

1
2
3
$example = ["zh"=>"tw","en"=>2,"cn"=>3.3,"vn"=>false];
$result = array_values($example);
-> $result = ["tw",2,3.3,false]

要取得 索引,使用 array_keys()

1
2
3
4
5
6
7
$example = ["zh"=>"tw","en"=>2,"cn"=>3.3,"vn"=>false];
$result = array_keys($example);
-> $result = ["zh","en","cn","vn"]

$example = ["zh","en","cn","vn","en"];
$result = array_keys($example,"en");
-> 一維陣列使用返回陣列位置 $result =[1,4]

處理多次資料功能循環

多個陣列,使用 array_map()

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
32
33

// 沒宣告函數功能
$example = ["zh","en","cn","vn"];
$example_2 = [1,2,3,4];
$result = array_map(null,$example,$example_2);
-> $result =[
[0]=> [
[0]=>"zh",
[1]=> 1
],
[1]=>[
[0]=>"en",
[1]=> 2
],
[2]=> [
[0]=> "cn",
[1]=> 3
],
[3]=> [
[0]=> "vn",
[1]=> 4
]
]

// 有宣告函數功能
function strick($n)
{
return ($n ." ^ ". $n);
}
$example = ["zh","en","cn","vn"];
$result = array_map("strick",$example);
-> $result =["zh ^ zh","en ^ en","cn ^ cn","vn ^ vn"]

陣列相關的函數還有很多,這邊筆者只是先列出較常使用的提供參考。

處理後端資料轉陣列(JQuery)

這邊不算 PHP的語法,是筆者在過往專案中有使用的部分,

後端通常情況下回傳資料都會是 json 格式,前端轉陣列使用上的參考。

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
32
33
let response ={
"type":"success",
"data":
"1":{
"id": 1,
"code": "zh_tw",
"count": 25
}
};
let data_result = new Array();

Object.values() //傳入物件,直接轉陣列

Object.values(response.data).forEach((item)=>{
data_result.push(item['code']);
});

-> data_result = ["zh_tw"];

Object.keys() //傳入物件,將其 key 值轉陣列

Object.keys(response.data).forEach((item)=>{
data_result.push(item);
});
-> data_result = ["1"];

Object.entries() //傳入物件,將 key 與 value 轉陣列

Object.entries(response.data).forEach((item)=>{
data_result.push(item);
});
-> data_result = [ ["1", { "id": 1, "code": "zh_tw", "count": 25 }]];

資料參考來源

PHP: Hypertext Preprocessor