寫了 PHP 一陣子
PHP array function 非常多
所以不是很熟
最近做案子有用到一些實用的
做一下筆記,方便快速尋找
array_chunk
陣列切割多個區塊函式
簡單說明一下,有時候需要多批陣列
這時候就用得到這個函式array_chunk ( array $array , int $size [, bool $preserve_keys = FALSE ] ) : array
第三個參數是否要保留 key
PHP: array_chunk - Manual
1 |
|
剛好官網看到很有趣的寫法
partition 決定個數,依照陣列做切割
感覺有機會用到
array_column
對二維陣列對裡面第一層抓取 key 資料出來。
array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array
感覺很適合 Database 搜尋出來資料,抓取部分欄位。
這時可以用 array_filter,array_unique,array_values 做整理。
相當實用!!
當然用途還滿多了,第一個能對isset,get 模術方法去抓資料
array_count_value
array_count_values ( array $array ) : array
統計數組中所有的值
1 |
|
PHP: array_count_values - Manual
array_diff
array_diff ( array $array1 , array $array2 [, array $... ] ) : array
對比 array1 和其他一個或者多個數組,返回在 array1 中但是不在其他 array 裡的值。
目前沒什麼用到,但感覺還是有用處的…
array_fill
array_fill ( int $start_index , int $num , mixed $value ) : array
填充陣列用的函式。
array_filter
array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
過濾陣列(自定)函式。
我覺得還滿實用的!!
當 callback 沒有設定,預設 null, ‘’(空字串)都會被清除
相當實用!!!
callback
使用的回调函数
如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目。更多信息见转换为布尔值。
1 |
|
array_flip
陣列 key 跟 value 做交換
array_flip ( array $array ) : array
算是滿實用的函式。
array_push & \$var[]
array_push ( array &$array , mixed $value1 [, mixed $... ] ) : int
回傳 增加數量。
但還是推薦使用$var[]
array_unshift
跟上一個array_push
很像,但他是加在陣列前面
1 |
|
array_pop
移除(回傳)後面陣列
array_shift
移除(回傳)前面陣列
array_rand
array_rand ( array $array [, int $num = 1 ] ): mixed
隨機回傳陣列,第二個陣列可以回傳隨機個數
感覺實用!!
array_slice
array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) : array
從陣列中取出一段。
比較特別的是 $offset
,$length
可以用負數,為負數代表就是抓取後面位置$offset
,$length
可容錯,不會有溢位的問題!!相當時用
2019-07-01
今天做這個有 index(key)容錯
假如長度少於 key 內容,會取出陣列最後面一個位置
算是滿好用。
array_unique 後可以省略做 array_values
直接做 array_slice
真的非常方便
array_unique 也可以比對整個 array,objectsort($arr, SORT_STRING);
原理如下網站
PHP 排序模式 SORT_NUMERIC / SORT_STRING / SORT_NATURAL 详解 備份圖
array_splice
array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] ) : array
array_sum
把所有陣列做加總。
array_search
array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed
陣列搜尋,會回傳找到的位置正確說是 key 值。
多維度搜尋
跟 array_search 神搭配
1 | // $userdb=Array |
查詢最後一個 key
1 | array_search('green', array_reverse($array)); |
array_unique
array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array
sort_flags
第二個可選參數 sort_flags 可用於修改排序行為:
排序類型標記:
SORT_REGULAR - 按照通常方法比較(不修改類型)
SORT_NUMERIC - 按照數字形式比較
SORT_STRING - 按照字符串形式比較
SORT_LOCALE_STRING - 根據當前的本地化設置,按照字符串比較。
但我覺得注意 array_unique 移除 value,但是不會合併
切記可以需要做 array_value or array_slice
切記可以需要做 array_value or array_slice
切記可以需要做 array_value or array_slice
也非一定要用上面兩個
可以做foreach
但是做for($i = 0;$i < count(xxx); $i++)
(PS: $cnt = count(xxx); for($i = 0; $i < $cnt; \$i++>)會比較好)
可能需要注意會有問題!!!
類似對二維陣列做 array_column 方法
1 |
|
array_values
我以為有排序合併效果,但是沒有!!
詳細看官往範例
1 |
|
array_walk vs array_map
我目前還很少用到這些,不過這個函式也滿像的,所以特別記錄一下。
簡單說最大的差異 array_walk 會回傳 true
,false
,array_map 會回傳 callback 傳回去資料
假如要對原資料變數做更動,使用 array_walk ,但切記宣告記得在function callback(&$xxx,...)
(&符號)
光&
這點我覺得不是很實用了
詳細:php array_map 与 array_walk 使用对比 - 偶木 - CSDN 博客
in_array
in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool
跟 array_search 有點像,但 return 回去是 bollean
詳細可參考:
usort,uksort
自定排序
其實我對 callback 排序記不太住
1 | //由小排到大 |
- PHP usort()的使用 - liuj8929 的博客 - CSDN 博客
- php 陣列排序 usort、uksort 與 sort 函式用法 | 程式前沿
- 关于 php 中 usort 函数的解读 - 简书
PHP 另類比較方法 <=>
太空船操作符(組合比較符)
太空船操作符用於比較兩個表達式。當$a小於(-1)、等於(0)或大於(1)$b 時它分別返回-1、0 或 1。 比較的原則是沿用 PHP 的常規比較規則進行的。
這方法感覺好記!!!
但只能用在 PHP 7.1
1 | // tested on PHP 7.1 |
- What is <=> (the ‘Spaceship’ Operator) in PHP 7? - Stack Overflow
- PHP: rfc:combined-comparison-operator
還有多個欄位排序方法
1 | function order_func($a, $b) { |
shuffle
shuffle ( array &$array ) : bool
隨機排序陣列函式。
實用!!!
explode = list()
explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array
1 | $data = "foo:*:1023:1000::/home/foo:/bin/sh"; |
老實說我不常這樣寫,算是小記
array_key_exists() vs isset()
1 |
|
其他小記(感想)
最近寫久了,雖然覺得 PHP 處理 array 很方便,但發現都是 function base 程式寫上面不是很方便
最近剛好看到 Laravel 有 Collection , 改善我上面說的缺點
有爬過文章說跟 array 校能差不多!!
集合 - Laravel - 為網頁藝術家創造的 PHP 框架