php数组操作集锦- 掌握了数组操作, 也就掌握了php
作為只是作為一種生存手段, 搞技術(shù)不用鉆牛角尖! 有些東西, 只要大致了解, 如果已經(jīng)進行了深入的了解, 但還是不能解決,就不要繼續(xù)了...
"專"相關(guān)的字, 只有 "鉆" 金屬旁的是zuan, 其余的都是 "zhuan" 包括: 轉(zhuǎn), 傳, 專心.等等..
其時, 要想掌握php下的所有的: 數(shù)組/字符串 的操作函數(shù), 那是不現(xiàn)實的, 你不可能把所有的函數(shù)都 記住清楚, 而且也沒有必要! 還是那句老話, 把常用的記住, 其他的只是在需要的時候, 再查.
程序元的美德!
the three chief virtues of a programmer are : laziness, impatience, hubris...
懶惰, 追求自動化;
急躁,不耐煩,
hubris: 狂妄,自大,傲慢...
讓一切都盡可能自動化起來的哲學(xué)起源于'
UNIX世界的哲學(xué):
在linux下, 有很多的工具和命令行, 來處理繁瑣的, 復(fù)雜的配置工作, 比如apache的配置, 等等....
參考下面的文章, 是很好的:
http://www.cnblogs.com/staven/p/5142515.html
http://pcwanli.blog.163.com/blog/static/453156112010111441852254/
php為什么如此強大好用? 很重要的一個因素是, 它提供了眾多的 功能強大的 內(nèi)置函數(shù).而且這些函數(shù)是非常靈活的,"有句套話是: php做到了怎么方便怎么來, 怎么好用就怎么用", 基本上你想到的功能, 函數(shù)都提供了. 基本上你不用自己去編寫處理函數(shù)了, 你只需要編寫自己的 邏輯函數(shù)和 業(yè)務(wù)函數(shù)就好了.
php編程的一個基本思想, 由于 php是弱類型語言, 函數(shù)中的參數(shù), 沒有指定/ 規(guī)定 參數(shù)的 數(shù)據(jù)類型, 也沒有規(guī)定返回值的類型, 因此, 在使用函數(shù)的時候, 一定要 時時 考慮, 或者檢查參數(shù)的數(shù)據(jù)類型, 要事先對參數(shù) 類型作檢查處理: if(is_file, is_array()...is_string...is_numeric...)等等, 因為不同類型 的參數(shù)傳入時, 返回值甚至 返回類型都是不同的 也要對函數(shù)的返回值 作處理. 而且要注意 類型的隱含 轉(zhuǎn)換和相等.
同時, php函數(shù), 也大量使用 參數(shù)的 省略值, 所以, 在使用函數(shù)的時候, 也要時時提醒自己, 函數(shù)是否有省略值, 不要以為函數(shù)的 原型就是 你平常使用的那樣!
常說php有很多坑, 可能就是說的上面的亮點吧???
php的兩個主要操作點就是, 數(shù)組和字符串. 而數(shù)組的操作更多. 基本上, 只要掌握了數(shù)組的操作, php就完了. 因此, 平時編程的思路就是, 盡量把 問題, 轉(zhuǎn)化成 數(shù)組來進行處理.
取數(shù)組的值或鍵:
array_keys($array): 取出鍵, 用數(shù)字索引
array_keys($array, '四川'); 也可以 根據(jù)值, 只取出指定 value的 鍵.
array_values($array): 取出數(shù)組的值, 主要有兩個使用場合和作用, 一是只需要值, 去掉key, 二是原來的keys比較混亂, 要去掉原來的keys.
注意區(qū)分 array_keys和 key函數(shù) 的區(qū)別?
array數(shù)組, 本身就提供了 遍歷 數(shù)組內(nèi)的元素的 方法,(通過數(shù)組內(nèi)部的指針的移動) 如 獲取當前元素的key值和元素值的函數(shù): key(), current(), 注意這個不是value. 而數(shù)組指針的移動有: next(), previous(), last(), 最前面的指針方法: reset().
注意, 對php中的數(shù)組操作函數(shù), 由于php對數(shù)組的處理, 是按照數(shù)組來處理的, 不是按照對象來處理的, 所以, 基本上關(guān)于數(shù)組的操作, 都是 全局函數(shù), 而不是 對象的點 操作方式.
數(shù)組中, 三個搜索函數(shù)in_array, array_search, array_key_exists的區(qū)別?
in_array和array_search
兩者都是判斷 數(shù)組元素的值 是否存在, 但是兩者的返回值 不同.
in_array是判斷 數(shù)組元素的值 是否存在, 返回值是bool類型, 存在為true, 不存在為false.
array_search 是判斷數(shù)組元素的值 是否存在, 但是它返回的是 如果元素值存在返回對應(yīng)的key值 , 如果不存在,也返回false,就是說, array_search返回的是key值.
arry_key_exists和isset
這兩者搜索的是數(shù)組元素的key. 區(qū)別是, 如果key對應(yīng)的元素值為null或false, 則isset返回false, 而array_key_exists仍然返回true.注意后者函數(shù)的用法, arry_key_exists參數(shù)的順序是: array_key_exists('要查詢的key', $arr); 參數(shù)的順序不要搞反了.
怎樣才能做到 寫代碼就像寫文章一樣優(yōu)雅, 有趣??? 其實, 寫英文文章寫多了, 你就會有那種感覺了,用寫英文文章的思路和習(xí)慣來寫代碼, 你就不會感到累! 感覺寫代碼寫起來就是一件很 有韻律, 很優(yōu)雅的一件事, 自然你的代碼就會" 顯得 " 更好, 你的感覺也會更好. 一個最重要的原則就是, 寫代碼要 以 "單詞" 為單位, 除了大中小括號外, 其余的單詞之間都要用空格加以分隔. 當然, 最嚴格的是連各種括號都要分隔, 但是那樣可能會影響寫代碼的速度.一般做到上面 兩點就不錯了.
數(shù)組的快速生成?
使用range函數(shù), 可以快速的生成 指定范圍內(nèi)的 數(shù)組值. $arr = arrage(1, 10); 這時 $arr就是數(shù)組了. 但是, 要注意, 這樣的話, 數(shù)組的值是1, 到 10, 而數(shù)組的下標的值 卻是: 0 ~ 到 9.
array_merge和array_combine的區(qū)別
前者是元素值的組合, 而后者是兩個數(shù)組, 一個作為keys, 另一個作為values的對應(yīng) 結(jié)合.
數(shù)組搜索的區(qū)別?
isset和array_key_exists是 搜索key, 兩者的區(qū)別是前者對于key=>null, 返回的是false, 后者即使是key=>null也返回true
in_array和array_search是 搜索value, 但是in_array返回的是值是否存在的true/false. 而array_search返回的是 false(不存在值時),值存在時則返回對應(yīng)的key
array_filter和 array_map的區(qū)別? 對數(shù)組元素過濾?
array_filter 是對數(shù)組元素 使用 callback function 函數(shù)進行 過濾. 有的元素, 會被 removed. 在過濾 flase, null ,""而保留 0時, 要使用 strlen作callback函數(shù)
array_filter函數(shù)的特點: 第一, 它不會改變 數(shù)組元素的本身, 元素本身的值跟你的return 完全沒有關(guān)系! 這一點必須明確, 不管你的回調(diào)函數(shù)如何寫! 第二, 它是根據(jù) return的值的 false/true, 來決定去留的, 就這么單純.
而 array_map則是對所有的數(shù)組元素, 都使用 回調(diào)函數(shù), 它不會 過濾/刪除元素的. **和array_filter不同的是, 它們的參數(shù)順序不同! 由于array_map可以 帶多個數(shù)組, 如 $arr1, $arr2..., 所以 要處理的 數(shù)目/個數(shù)不確定的 數(shù)組序列 要放在函數(shù)的后面, 因此, 第一個參數(shù) 是 callback, 這個跟 array_filter第一個參數(shù)是數(shù)組, 第二個參數(shù)才是callback不同!
特別注意的是, 如果array_map的第一個參數(shù)callback是null的時候, 后面是多個數(shù)組時, 返回的是由這些數(shù)組組成的二維 數(shù)組, 但是,不同于 array_merge! (array_merge返回的是一維 數(shù)組!!!)
array_map? 和 array_walk?
array_map 的主要目的是對數(shù)組的元素使用 函數(shù)回調(diào)處理, 目的是為了返回處理后的數(shù)組;
array_walk 的主要的目的是, 依次取出數(shù)組中的元素, 然后做處理, 目的是為了處理后的結(jié)果.如同foreach一樣, 也是遍歷數(shù)組中的元素, 取出來進行處理. 但是, foreach處理的代碼是 {代碼塊....}, 而array_walk更進一步, 是用一個完整的函數(shù)來進行處理的. (同樣的, 需要一個全局函數(shù), 如果是在類里面, 也要使用 lamda匿名函數(shù)). 如果使用array_walk對 數(shù)組中的原元素進行處理, 就要在自定義函數(shù)中傳入 元素的 引用, 參數(shù)的順序是: &$v, $k
對于php而言, 表達式返回的值, 如果是賦值表達式, 則返回的是, 被賦值的變量的值, 如果沒有賦值, 只是算數(shù)表達式, 則返回算術(shù)式子的計算結(jié)果.
對于array_walk, 由于不需要返回值, (只是處理), 所以, 最后并不需要寫 return 語句, 而且, 這里, 即使你寫了return語句, 也沒有任何效果(因為return不產(chǎn)生輸出!)而 array_walk 的返回值是邏輯值, 即boolean,是看回調(diào)函數(shù)是否應(yīng)用成功,即回調(diào)函數(shù)是否出錯的布爾值! 但是對于 array_map(和array_filter也是這樣), 由于最后要返回值, 所以一定要加 return語句, 否則, 如果只是賦值, 如: $v = $v * 2; 由于沒有返回值, 所以最后返回的數(shù)組元素值都是null.
php5.3的回調(diào)函數(shù)和閉包! 因此, 今后就可以像寫js那樣靈活的, 舒服的寫回調(diào)函數(shù)了!!
php中的大量函數(shù)使用了 回調(diào)函數(shù)(callable callback). 在php5.3之前, 由于不支持 lamda函數(shù)和閉包, 所以必須先定義一個函數(shù), 然后, 再傳入這個函數(shù)名的字符串. 這個就比較麻煩. 從5.3開始, 就可以 使用 匿名函數(shù)和閉包了.
lamda函數(shù): 從Lisp系的scheme語言而來的, 在scheme語言中,定義一個匿名函數(shù)就是用 lamda關(guān)鍵字的.
lamda函數(shù), 就是通常所說的匿名函數(shù).用法如同在javascript中大量使用的匿名函數(shù)一樣. 匿名函數(shù)的用法有這樣幾種:
**第二種方式中, 在 類 里面使用 回調(diào)函數(shù)的時候, 就 非常有用了! 就不會很麻煩地使用 類方法作回調(diào)函數(shù)名稱了! 而且如果你直接使用 "類的方法(不管是public還是private的)作為回調(diào)函數(shù)都是不行的.., 即使你使用 '$this-> callback_class_method' : 因為回調(diào)函數(shù)要求的是, 一個 "全局函數(shù)"
在中文輸入法中, 由于大多數(shù)輸入法都支持 "直接上文/直接顯示在"正文"中", 所以輸入時, 用不著看輸入條, 直接看輸入的正文就好了. 經(jīng)常發(fā)生的/ 為什么老是出錯呢?是因為你在輸入的時候, 實際上, 眼睛是處于 "暫時的 盲點 /黑視"的.
prag'matic: 務(wù)實的, 切合實際的: we need to adopt a more pragmatic approach.
php的匿名函數(shù)和閉包的區(qū)別?
<script type="text/javascript"> function(){ // 這個就是匿名函數(shù), 即只是寫function, 不寫函數(shù)名var i=1;function b(){ // 閉包就是一個函數(shù)中 再定義的 函數(shù). 閉包可以使用 包含它的函數(shù)中的 變量...++i;return i;}return b; } var c=a(); alert(c()); </script>閉包會攜帶它的函數(shù)的作用域,因此會比其他函數(shù)占用更多的內(nèi)存,所以使用閉包要非常注意!!!
list函數(shù),“列表”, 表示將數(shù)組中 對應(yīng)的 元素值 相應(yīng)的賦值給 多個變量...
explode和implode是在數(shù)組和字符串之間轉(zhuǎn)換, 轉(zhuǎn)換的分隔符不能為空: 如果delimiter為空, 則
會產(chǎn)生一個警告: empty delimiter...
數(shù)組排序用sort, 這個sort($arr)是改變$arr這個數(shù)組本身的, 不是返回一個排序后的數(shù)組, sort返回的是一個bool值, 看是否排序成功...
數(shù)組倒序用array_reverse, 這個倒序是不分 大小等, 絕對的按順序顛倒的... 而array_flip是數(shù)組翻轉(zhuǎn), 是將key和value進行翻轉(zhuǎn)...
php數(shù)組還是使用 array(1,2,3,4)的形式, 不使用[1,2,3,4]. 很多時候, 好像會出現(xiàn)解析錯誤!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的php数组操作集锦- 掌握了数组操作, 也就掌握了php的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超级终端secureCRT-下载及使用
- 下一篇: 给初学者的 RxJava2.0 教程 (