php數組,php數組操作集錦

作為只是作為一種生存手段, 搞技術不用鑽牛角尖! 有些東西, 只要大致了解, 如果已經進行了深入的了解, 但還是不能解決,就不要繼續了...

"專"相關的字, 只有 "鑽" 金屬旁的是zuan, 其余的都是 "zhuan" 包括: 轉, 傳, 專心.等等..

其時, 要想掌握php下的所有的: 數組/字符串 的操作函數, 那是不現實的, 你不可能把所有的函數都 記住清楚, 而且也沒有必要! 還是那句老話, 把常用的記住, 其他的只是在需要的時候, 再查.

因為php 幾乎包含了, 所有的, 滿足一切的 數組/字符串的操作 函數. 因此, 如果遇到需求的代碼, 需要數組或字符串的處理, 要先查閱 : 提供php的信息, 和需求, 然后看有沒有相應的函數...

列表, 列表中同樣可以使用其他markdown樣式, 如列表中, 使用 井號等等..

程序元的美德!

the three chief virtues of a programmer are : laziness, impatience, hubris...

懶惰, 追求自動化;

急躁,不耐煩,

hubris: 狂妄,自大,傲慢...

讓一切都盡可能自動化起來的哲學起源於'

UNIX世界的哲學:

小即是美

讓程序只做好一件事

盡可能早地創建原型(然后逐步演進)

數據應該保存為文本文件

每個工具只做且做好一件事

工具可以協作起來

一切面向文本 (一切盡量以 配置文件 ini的方式來實現)...

避免使用可定制性低下的用戶界面

在linux下, 有很多的工具和命令行, 來處理繁瑣的, 復雜的配置工作, 比如apache的配置, 等等....

php為什么如此強大好用? 很重要的一個因素是, 它提供了眾多的 功能強大的 內置函數.而且這些函數是非常靈活的,"有句套話是: php做到了怎么方便怎么來, 怎么好用就怎么用", 基本上你想到的功能, 函數都提供了. 基本上你不用自己去編寫處理函數了, 你只需要編寫自己的 邏輯函數和 業務函數就好了.

php編程的一個基本思想, 由於 php是弱類型語言, 函數中的參數, 沒有指定/ 規定 參數的 數據類型, 也沒有規定返回值的類型, 因此, 在使用函數的時候, 一定要 時時 考慮, 或者檢查參數的數據類型, 要事先對參數 類型作檢查處理: if(is_file, is_array()...is_string...is_numeric...)等等, 因為不同類型 的參數傳入時, 返回值甚至 返回類型都是不同的 也要對函數的返回值 作處理. 而且要注意 類型的隱含 轉換和相等.

同時, php函數, 也大量使用 參數的 省略值, 所以, 在使用函數的時候, 也要時時提醒自己, 函數是否有省略值, 不要以為函數的 原型就是 你平常使用的那樣!

常說php有很多坑, 可能就是說的上面的亮點吧???

php的兩個主要操作點就是, 數組和字符串. 而數組的操作更多. 基本上, 只要掌握了數組的操作, php就完了. 因此, 平時編程的思路就是, 盡量把 問題, 轉化成 數組來進行處理.

取數組的值或鍵:

array_keys($array): 取出鍵, 用數字索引

array_keys($array, '四川'); 也可以 根據值, 只取出指定 value的 鍵.

array_values($array): 取出數組的值, 主要有兩個使用場合和作用, 一是只需要值, 去掉key, 二是原來的keys比較混亂, 要去掉原來的keys.

注意區分 array_keys和 key函數 的區別?

array數組, 本身就提供了 遍歷 數組內的元素的 方法,(通過數組內部的指針的移動) 如 獲取當前元素的key值和元素值的函數: key(), current(), 注意這個不是value. 而數組指針的移動有: next(), previous(), last(), 最前面的指針方法: reset().

注意, 對php中的數組操作函數, 由於php對數組的處理, 是按照數組來處理的, 不是按照對象來處理的, 所以, 基本上關於數組的操作, 都是 全局函數, 而不是 對象的點 操作方式.

數組中, 三個搜索函數in_array, array_search, array_key_exists的區別?

in_array和array_search

兩者都是判斷 數組元素的值 是否存在, 但是兩者的返回值 不同.

in_array是判斷 數組元素的值 是否存在, 返回值是bool類型, 存在為true, 不存在為false.

array_search 是判斷數組元素的值 是否存在, 但是它返回的是 如果元素值存在返回對應的key值 , 如果不存在,也返回false,就是說, array_search返回的是key值.

arry_key_exists和isset

這兩者搜索的是數組元素的key. 區別是, 如果key對應的元素值為null或false, 則isset返回false, 而array_key_exists仍然返回true.注意后者函數的用法, arry_key_exists參數的順序是: array_key_exists('要查詢的key', $arr); 參數的順序不要搞反了.

怎樣才能做到 寫代碼就像寫文章一樣優雅, 有趣??? 其實, 寫英文文章寫多了, 你就會有那種感覺了,用寫英文文章的思路和習慣來寫代碼, 你就不會感到累! 感覺寫代碼寫起來就是一件很 有韻律, 很優雅的一件事, 自然你的代碼就會" 顯得 " 更好, 你的感覺也會更好. 一個最重要的原則就是, 寫代碼要 以 "單詞" 為單位, 除了大中小括號外, 其余的單詞之間都要用空格加以分隔. 當然, 最嚴格的是連各種括號都要分隔, 但是那樣可能會影響寫代碼的速度.一般做到上面 兩點就不錯了.

數組的快速生成?

使用range函數, 可以快速的生成 指定范圍內的 數組值. $arr = arrage(1, 10); 這時 $arr就是數組了. 但是, 要注意, 這樣的話, 數組的值是1, 到 10, 而數組的下標的值 卻是: 0 ~ 到 9.

array_merge和array_combine的區別

前者是元素值的組合, 而后者是兩個數組, 一個作為keys, 另一個作為values的對應 結合.

數組搜索的區別?

isset和array_key_exists是 搜索key, 兩者的區別是前者對於key=>null, 返回的是false, 后者即使是key=>null也返回true

in_array和array_search是 搜索value, 但是in_array返回的是值是否存在的true/false. 而array_search返回的是 false(不存在值時),值存在時則返回對應的key

array_filter和 array_map的區別? 對數組元素過濾?

array_filter 是對數組元素 使用 callback function 函數進行 過濾. 有的元素, 會被 removed. 在過濾 flase, null ,""而保留 0時, 要使用 strlen作callback函數

array_filter函數的特點: 第一, 它不會改變 數組元素的本身, 元素本身的值跟你的return 完全沒有關系! 這一點必須明確, 不管你的回調函數如何寫! 第二, 它是根據 return的值的 false/true, 來決定去留的, 就這么單純.

而 array_map則是對所有的數組元素, 都使用 回調函數, 它不會 過濾/刪除元素的. **和array_filter不同的是, 它們的參數順序不同! 由於array_map可以 帶多個數組, 如 $arr1, $arr2..., 所以 要處理的 數目/個數不確定的 數組序列 要放在函數的后面, 因此, 第一個參數 是 callback, 這個跟 array_filter第一個參數是數組, 第二個參數才是callback不同!

特別注意的是, 如果array_map的第一個參數callback是null的時候, 后面是多個數組時, 返回的是由這些數組組成的二維 數組, 但是,不同於 array_merge! (array_merge返回的是一維 數組!!!)

array_map? 和 array_walk?

array_map 的主要目的是對數組的元素使用 函數回調處理, 目的是為了返回處理后的數組;

array_walk 的主要的目的是, 依次取出數組中的元素, 然后做處理, 目的是為了處理后的結果.如同foreach一樣, 也是遍歷數組中的元素, 取出來進行處理. 但是, foreach處理的代碼是 {代碼塊....}, 而array_walk更進一步, 是用一個完整的函數來進行處理的. (同樣的, 需要一個全局函數, 如果是在類里面, 也要使用 lamda匿名函數). 如果使用array_walk對 數組中的原元素進行處理, 就要在自定義函數中傳入 元素的 引用, 參數的順序是: &$v, $k

對於php而言, 表達式返回的值, 如果是賦值表達式, 則返回的是, 被賦值的變量的值, 如果沒有賦值, 只是算數表達式, 則返回算術式子的計算結果.

對於array_walk, 由於不需要返回值, (只是處理), 所以, 最后並不需要寫 return 語句, 而且, 這里, 即使你寫了return語句, 也沒有任何效果(因為return不產生輸出!)而 array_walk 的返回值是邏輯值, 即boolean,是看回調函數是否應用成功,即回調函數是否出錯的布爾值! 但是對於 array_map(和array_filter也是這樣), 由於最后要返回值, 所以一定要加 return語句, 否則, 如果只是賦值, 如: $v = $v * 2; 由於沒有返回值, 所以最后返回的數組元素值都是null.

php5.3的回調函數和閉包! 因此, 今后就可以像寫js那樣靈活的, 舒服的寫回調函數了!!

php中的大量函數使用了 回調函數(callable callback). 在php5.3之前, 由於不支持 lamda函數和閉包, 所以必須先定義一個函數, 然后, 再傳入這個函數名的字符串. 這個就比較麻煩. 從5.3開始, 就可以 使用 匿名函數和閉包了.

lamda函數: 從Lisp系的scheme語言而來的, 在scheme語言中,定義一個匿名函數就是用 lamda關鍵字的.

lamda函數, 就是通常所說的匿名函數.用法如同在javascript中大量使用的匿名函數一樣. 匿名函數的用法有這樣幾種:

將匿名函數賦值給一個變量, 然后通過變量來調用函數. $lamda = function () {....}; $lamda();

在php的函數中, 凡是需要 callback的地方, 都直接用 lamda函數: 如 array_filter($arr, function($v){..}

**第二種方式中, 在 類 里面使用 回調函數的時候, 就 非常有用了! 就不會很麻煩地使用 類方法作回調函數名稱了! 而且如果你直接使用 "類的方法(不管是public還是private的)作為回調函數都是不行的.., 即使你使用 '$this-> callback_class_method' : 因為回調函數要求的是, 一個 "全局函數"

在中文輸入法中, 由於大多數輸入法都支持 "直接上文/直接顯示在"正文"中", 所以輸入時, 用不着看輸入條, 直接看輸入的正文就好了. 經常發生的/ 為什么老是出錯呢?是因為你在輸入的時候, 實際上, 眼睛是處於 "暫時的 盲點 /黑視"的.

prag'matic: 務實的, 切合實際的: we need to adopt a more pragmatic approach.

php的匿名函數和閉包的區別?

function(){ // 這個就是匿名函數, 即只是寫function, 不寫函數名

var i=1;

function b(){ // 閉包就是一個函數中 再定義的 函數. 閉包可以使用 包含它的函數中的 變量...

++i;

return i;

}

return b;

}

var c=a();

alert(c());

閉包會攜帶它的函數的作用域,因此會比其他函數占用更多的內存,所以使用閉包要非常注意!!!

list函數,“列表”, 表示將數組中 對應的 元素值 相應的賦值給 多個變量...

explode和implode是在數組和字符串之間轉換, 轉換的分隔符不能為空: 如果delimiter為空, 則

會產生一個警告: empty delimiter...

數組排序用sort, 這個sort($arr)是改變$arr這個數組本身的, 不是返回一個排序后的數組, sort返回的是一個bool值, 看是否排序成功...

數組倒序用array_reverse, 這個倒序是不分 大小等, 絕對的按順序顛倒的... 而array_flip是數組翻轉, 是將key和value進行翻轉...

php數組還是使用 array(1,2,3,4)的形式, 不使用[1,2,3,4]. 很多時候, 好像會出現解析錯誤!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值