巧用 PHP 數(shù)組函數(shù)

0x00 前言

PHP 的數(shù)組是一種很強(qiáng)大的數(shù)據(jù)類(lèi)型溯壶,與此同時(shí) PHP 內(nèi)置了一系列與數(shù)組相關(guān)的函數(shù)可以很輕易的實(shí)現(xiàn)日常開(kāi)發(fā)的功能镣屹。但是我發(fā)現(xiàn)好像很多小伙伴都忽略了內(nèi)置函數(shù)的作用(比如我自己就編寫(xiě)過(guò)一些有關(guān)數(shù)組操作的代碼然后發(fā)現(xiàn)PHP自帶了/(ㄒoㄒ)/~~)圃郊,善用 PHP 內(nèi)置函數(shù)能極大的提高開(kāi)發(fā)效率和運(yùn)行效率(內(nèi)置函數(shù)都是用 C 寫(xiě)的效率比用 PHP 寫(xiě)的高很多),所以本文便總結(jié)了一些在常見(jiàn)場(chǎng)景中利用 PHP 內(nèi)置函數(shù)的實(shí)現(xiàn)方法女蜈。此外如果想更深入的學(xué)習(xí)有關(guān) PHP 數(shù)組函數(shù)最好還是去查 PHP 手冊(cè)持舆!點(diǎn)我看官方數(shù)組函數(shù)手冊(cè)

10年架構(gòu)師領(lǐng)你架構(gòu)-成長(zhǎng)之路-

(騰訊T3-T4)打造互聯(lián)網(wǎng)PHP架構(gòu)師教程目錄大全色瘩,只要你看完,薪資立馬提升2倍(持續(xù)更新)

點(diǎn)擊與我交流企鵝群

0x01 取指定鍵名

對(duì)于某些關(guān)聯(lián)數(shù)組逸寓,有時(shí)候我們只想取指定鍵名的那部分泞遗,比如數(shù)組為 ['id' => 1, 'name' => 'zane', 'password' => '123456'] 此時(shí)若只想取包含 id 和 name 的部分該怎么實(shí)現(xiàn)呢?下面直接貼代碼席覆。

<?php$raw = ['id' => 1, 'name' => 'zane', 'password' => '123456'];// 自己用 PHP 實(shí)現(xiàn)function onlyKeys($raw, $keys) {    $new = [];    foreach ($raw as $key => $val) {        if (in_array($key, $keys)) {            $new[$key] = $val;        }    }        return $new;}// 用 PHP 內(nèi)置函數(shù)實(shí)現(xiàn)function newOnlyKeys($array, $keys) {    return array_intersect_key($array, array_flip($keys));}var_dump(onlyKeys($raw, ['id', 'name']));// 結(jié)果 ['id' => 1, 'name' => 'zane']var_dump(newOnlyKeys($raw, ['id', 'name']));// 結(jié)果 ['id' => 1, 'name' => 'zane']

很明顯簡(jiǎn)潔很多有木有!不過(guò) array_intersect_key 和 array_flip 是什么鬼汹买?這里簡(jiǎn)單的介紹一下這兩個(gè)函數(shù)的作用佩伤,首先是 array_flip 函數(shù),這個(gè)函數(shù)的功能是「將數(shù)組的鍵和值對(duì)調(diào)」晦毙,也就是鍵名變成值生巡,值變成鍵名。我們傳遞的 $keys 參數(shù)經(jīng)過(guò)這個(gè)函數(shù)便從 [0 => 'id', 1 => 'name'] 轉(zhuǎn)變?yōu)榱?['id' => 0, 'name' => 1]见妒。這樣做的目的是為了向 array_intersect_key 函數(shù)服務(wù)孤荣,array_intersect_key 函數(shù)的功能是「使用鍵名比較計(jì)算數(shù)組的交集」,也就是返回第一個(gè)參數(shù)數(shù)組中與其他參數(shù)數(shù)組相同鍵名的值须揣。這樣便實(shí)現(xiàn)了取指定鍵名的功能 (≧▽≦)/啦盐股!當(dāng)然要詳細(xì)了解這兩個(gè)函數(shù)的功能還是要查 PHP 官方手冊(cè):array_flip array_intersect_key

0x02 移除指定鍵名

有了上一個(gè)例子做鋪墊,這個(gè)就簡(jiǎn)單講講啦耻卡,道理是大同小異滴疯汁。

<?php$raw = ['id' => 1, 'name' => 'zane', 'password' => '123456'];// 用 PHP 內(nèi)置函數(shù)實(shí)現(xiàn)function removeKeys($array, $keys) {    return array_diff_key($array, array_flip($keys));}// 移除 id 鍵var_dump(removeKeys($raw, ['id', 'password']));// 結(jié)果 ['name' => 'zane']

和上一個(gè)例子相比本例只是將 array_intersect_key 函數(shù)改為 array_diff_key,嗯……相信大家能猜出來(lái)這個(gè)函數(shù)的功能「使用鍵名比較計(jì)算數(shù)組的差集」卵酪,剛好和 array_intersect_key 的功能相反而已幌蚊。官方手冊(cè):array_diff_key 0x03 數(shù)組去重

這個(gè)相信大家都有這個(gè)需求,當(dāng)然 PHP 也內(nèi)置了array_unique函數(shù)供給大家使用溃卡,如下例:

<?php$input = ['you are' => 666, 'i am' => 233, 'he is' => 233, 'she is' => 666];$result = array_unique($input);var_dump($result);// 結(jié)果 ['you are' => 666, 'i am' => 233]

嘿溢豆,用這個(gè)函數(shù)就能解決大部分問(wèn)題了,但是有時(shí)候你可能會(huì)覺(jué)得它不夠快瘸羡,原因如下: array_unique() 先將值作為字符串排序漩仙,然后對(duì)每個(gè)值只保留第一個(gè)遇到的鍵名,接著忽略所有后面的鍵名犹赖。 因?yàn)檫@個(gè)函數(shù)會(huì)先將數(shù)組進(jìn)行排序讯赏,所以速度可能在某些場(chǎng)景達(dá)不到預(yù)期的要求。 現(xiàn)在我們可以祭出我們的黑科技 array_flip 函數(shù)冷尉,眾所周知 PHP 里數(shù)組的鍵名是唯一的漱挎,所以在鍵名和值對(duì)調(diào)后重復(fù)的值便被忽略了。試想一下我們連續(xù)調(diào)用兩次 array_flip 函數(shù)是不是就相當(dāng)于實(shí)現(xiàn)了 array_unique 函數(shù)的功能呢雀哨?示例代碼如下:

<?php$input = ['you are' => 666, 'i am' => 233, 'he is' => 233, 'she is' => 666];$result = array_flip(array_flip($input));var_dump($result);// 結(jié)果 ['she is' => 666, 'he is' => 233]

嗯哼磕谅?私爷!結(jié)果和 array_unique 的不一樣!為什么膊夹,我們可以從 PHP 官方手冊(cè)得到答案: 如果同一個(gè)值出現(xiàn)多次衬浑,則最后一個(gè)鍵名將作為它的值,其它鍵會(huì)被丟棄放刨。 總的來(lái)說(shuō)就是 array_unique 保留第一個(gè)出現(xiàn)的鍵名工秩,array_flip 保留最后一個(gè)出現(xiàn)的鍵名。

注意:使用 array_flip 作為數(shù)組去重時(shí)數(shù)組的值必須能夠作為鍵名(即為 string 類(lèi)型或 integer 類(lèi)型)进统,否則這個(gè)值將被忽略助币。 此外,若不需要保留鍵名我們可以直接這樣使用 array_values(array_flip($input))螟碎。 0x04 重置索引 當(dāng)我們想要對(duì)一個(gè)索引并不連續(xù)的數(shù)組進(jìn)行重置時(shí)眉菱,比如數(shù)組:[0 => 233, 99 => 666],對(duì)于這種數(shù)組我們只需要調(diào)用 array_values 函數(shù)即可實(shí)現(xiàn)掉分。如下例:

<?php$input = [0 => 233, 99 => 666];var_dump(array_values($input));// 結(jié)果 [0 => 233, 1 => 66]

需要注意的是array_values函數(shù)并不止重置數(shù)字索引還會(huì)將字符串鍵名也同樣刪除并重置俭缓。那如何在保留字符串鍵名的同時(shí)重置數(shù)字索引呢?答案就是array_slice函數(shù)酥郭,代碼示例如下:

<?php$input = ['hello' => 'world', 0 => 233, 99 => 666];var_dump(array_slice($input, 0));// 結(jié)果 ['hello' => 'world', 0 => 233, 1 => 66]

array_slice函數(shù)的功能是取出數(shù)組的中的一段华坦,但它默認(rèn)會(huì)重新排序并重置數(shù)組的數(shù)字索引,所以可以利用它重置數(shù)組中的數(shù)字索引不从。

0x05 清除空值

嘿季春,有時(shí)候我們想清除某個(gè)數(shù)組中的空值比如:null、false消返、0载弄、0.0、[]空數(shù)組撵颊、''空字符串宇攻、'0'字符串0 ,這時(shí) array_filter 函數(shù)便能幫上大忙倡勇。代碼如下:

<?php$input = ['foo', false, -1, null, '', []];var_dump(array_filter($input));// 結(jié)果 [0 => 'foo', 2 => -1]

為什么會(huì)出現(xiàn)這樣的結(jié)果捏逞刷?array_filter 的作用其實(shí)是「用回調(diào)函數(shù)過(guò)濾數(shù)組中的單元」,它的第二個(gè)參數(shù)其實(shí)是個(gè)回調(diào)函數(shù)妻熊,向數(shù)組的每個(gè)成員都執(zhí)行這個(gè)回調(diào)函數(shù)夸浅,若回調(diào)函數(shù)的返回值為 true 便保留這個(gè)成員,為 false 則忽略扔役。這個(gè)函數(shù)還有一個(gè)特性就是: 如果沒(méi)有提供 callback 函數(shù)帆喇, 將刪除 array 中所有等值為 FALSE 的條目。 等值為 false 就是轉(zhuǎn)換為 bool 類(lèi)型后值為 false 的意思亿胸,詳細(xì)看文檔:轉(zhuǎn)換為布爾類(lèi)型坯钦。

注意:如果不填寫(xiě) callback 函數(shù)预皇,0、0.0婉刀、'0'字符串0 這些可能有意義的值會(huì)被刪除吟温。所以如果清除的規(guī)則有所不同還需要自行編寫(xiě) callback 函數(shù)。

0x06 確認(rèn)數(shù)組成員全部為真 有時(shí)候我們希望確認(rèn)數(shù)組中的的值全部為 true突颊,比如:['read' => true, 'write' => true, 'execute' => true]鲁豪,這時(shí)我們需要用一個(gè)循環(huán)判定嗎?NO律秃,NO爬橡,NO……只需要用 array_product 函數(shù)便可以實(shí)現(xiàn)了。代碼如下:

<?php$power = ['read' => true, 'write' => true, 'execute' => true];var_dump((bool)array_product($power));// 結(jié)果 true$power = ['read' => true, 'write' => true, 'execute' => false];var_dump((bool)array_product($power));// 結(jié)果 false

為什么能實(shí)現(xiàn)這個(gè)功能呢友绝? array_product 函數(shù)本來(lái)的功能是「計(jì)算數(shù)組中所有值的乘積」,在累乘數(shù)組中所有成員的時(shí)候會(huì)將成員的值轉(zhuǎn)為數(shù)值類(lèi)型肝劲。當(dāng)傳遞的參數(shù)為一個(gè) bool 成員所組成的數(shù)組時(shí)迁客,眾所周知 true 會(huì)被轉(zhuǎn)為 1,false 會(huì)被轉(zhuǎn)為 0辞槐。然后只要數(shù)組中出現(xiàn)一個(gè) false 累乘的結(jié)果自然會(huì)變成 0掷漱,然后我們?cè)賹⒔Y(jié)果轉(zhuǎn)為 bool 類(lèi)型不就是 false 了嘛!

注意:使用 array_product 函數(shù)將在計(jì)算過(guò)程中將數(shù)組成員轉(zhuǎn)為數(shù)值類(lèi)型進(jìn)行計(jì)算榄檬,所以請(qǐng)確保你了解數(shù)組成員轉(zhuǎn)為數(shù)值類(lèi)型后的值卜范,否則會(huì)產(chǎn)生意料之外的結(jié)果。比如:

<?php$power = ['read' => true, 'write' => true, 'execute' => 'true'];var_dump((bool)array_product($power));// 結(jié)果 false

上例是因?yàn)?true'在計(jì)算過(guò)程中被轉(zhuǎn)為 0鹿榜。要想詳細(xì)了解請(qǐng)點(diǎn)擊這里海雪。

0x07 獲取指定鍵名之前 / 之后的數(shù)組

如果我們只想要關(guān)聯(lián)數(shù)組中指定鍵名值之前的部分該怎么辦呢?又用一個(gè)循環(huán)舱殿?當(dāng)然不用我們可以通過(guò) array_keys奥裸、array_searcharray_slice 組合使用便能夠?qū)崿F(xiàn)!下面貼代碼:

<?php$data = ['first' => 1, 'second' => 2, 'third' => 3];function beforeKey($array, $key) {    $keys = array_keys($array);      // $keys = [0 => 'first', 1 => 'second', 2 => 'third']    $len = array_search($key, $keys);    return array_slice($array, 0, $len);}var_dump(beforeKey($data, 'first'));// 結(jié)果 []var_dump(beforeKey($data, 'second'));// 結(jié)果 ['first' => 1]var_dump(beforeKey($data, 'third'));// 結(jié)果 ['first' => 1, 'second' => 2]

思路解析沪袭,要實(shí)現(xiàn)這樣的功能大部分同學(xué)都應(yīng)該能想到 array_slice 函數(shù)湾宙,但這個(gè)函數(shù)取出部分?jǐn)?shù)組是根據(jù)偏移量(可以理解為鍵名在數(shù)組中的順序,從 0 開(kāi)始)而不是根據(jù)鍵名的冈绊,而關(guān)聯(lián)數(shù)組的鍵名卻是是字符串或者是不按順序的數(shù)字侠鳄,此時(shí)要解決的問(wèn)題便是「如何取到鍵名對(duì)應(yīng)的偏移量?」死宣,這是 array_keys 函數(shù)便幫了我們大忙伟恶,它的功能是「返回?cái)?shù)組中部分的或所有的鍵名」默認(rèn)返回全部鍵名,此外返回的鍵名數(shù)組是以數(shù)字索引的毅该,也就是說(shuō)返回的鍵名數(shù)組的索引就是偏移量知押!例子中的原數(shù)組變?yōu)椋?[0 => 'first', 1 => 'second', 2 => 'third'] 叹螟。然后我們通過(guò) array_search 便可以獲得指定鍵名的偏移量了,因?yàn)檫@個(gè)函數(shù)的功能是「在數(shù)組中搜索給定的值台盯,如果成功則返回首個(gè)相應(yīng)的鍵名」罢绽。有了偏移量我們直接調(diào)用 array_slice 函數(shù)便可以實(shí)現(xiàn)目的了。 上面的例子懂了静盅,那獲取指定鍵名之后的數(shù)組也就輕而易舉了良价,略微修改 array_slice 即可。直接貼代碼:

<?php$data = ['first' => 1, 'second' => 2, 'third' => 3];function afterKey($array, $key) {    $keys = array_keys($array);    $offset = array_search($key, $keys);    return array_slice($array, $offset + 1);}var_dump(afterKey($data, 'first'));// 結(jié)果 ['second' => 2, 'third' => 3]var_dump(afterKey($data, 'second'));// 結(jié)果 ['third' => 3]var_dump(afterKey($data, 'third'));// 結(jié)果 []

那如何獲取指定值之前或之后的數(shù)組呢蒿叠?嘿明垢,記得 array_search 的作用吧,其實(shí)我們只需要這樣調(diào)用 beforeKey(data, array\_search(value, $data)) 不就實(shí)現(xiàn)了嘛市咽! 0x08 數(shù)組中重復(fù)次數(shù)最多的值 敲黑板痊银,劃重點(diǎn)!據(jù)說(shuō)這是一道面試題喔施绎。假設(shè)有這樣一個(gè)數(shù)組 [6, 11, 11, 2, 4, 4, 11, 6, 7, 4, 2, 11, 8]溯革,請(qǐng)問(wèn)如何獲取數(shù)組中重復(fù)次數(shù)最多的值?關(guān)鍵就在于 array_count_values 函數(shù)谷醉。實(shí)例代碼如下:

<?php$data = [6, 11, 11, 2, 4, 4, 11, 6, 7, 4, 2, 11, 8];$cv = array_count_values($data);// $cv = [6 => 2, 11 => 4, 2 => 2, 4 => 3, 7 => 1, 8 => 1]arsort($cv);$max = key($cv);var_dump($max);// 結(jié)果 11

array_count_values 函數(shù)的功能是「統(tǒng)計(jì)數(shù)組中所有的值」致稀,就是將原數(shù)組中的值作為返回?cái)?shù)組的鍵名,值出現(xiàn)的次數(shù)作為返回?cái)?shù)組的值俱尼。這樣我們便可以通過(guò) arsort 函數(shù)對(duì)出現(xiàn)的次數(shù)進(jìn)行降序排序并且保持索引關(guān)聯(lián)抖单。最后使用 key 獲得當(dāng)前單元(當(dāng)前單元默認(rèn)為數(shù)組第一個(gè)成員)的鍵名,此時(shí)的鍵名即是原數(shù)組的值重復(fù)次數(shù)最多的值遇八。

0x09 打廣告時(shí)間

雖然 PHP 提供了很多和數(shù)組相關(guān)的函數(shù)矛绘,但使用起來(lái)還是不算太方便而且都是通過(guò)函數(shù)的調(diào)用方式而沒(méi)有面向?qū)ο笙嚓P(guān)的實(shí)現(xiàn),所以我最近在寫(xiě)一個(gè)開(kāi)源的工具類(lèi)項(xiàng)目 zane/utils刃永,封裝了一些常用的方法并且支持鏈?zhǔn)秸{(diào)用蔑歌,其中的 Ary 類(lèi)實(shí)現(xiàn) 「獲取數(shù)組中重復(fù)次數(shù)最多的值」只需一行,如下所示:

$data = [6, 11, 11, 2, 4, 4, 11, 6, 7, 4, 2, 11, 8];$max = Ary::new($data)->countValues()->maxKey();var_dump($max);// 結(jié)果 11

歡迎大家給我提 issue 和 pr揽碘,另外如果你喜歡這個(gè)項(xiàng)目希望動(dòng)動(dòng)小手點(diǎn)個(gè) star :-D 項(xiàng)目地址:github.com/zanemmm/uti…

0x0A 結(jié)語(yǔ)

其實(shí)還有很多實(shí)用的函數(shù)沒(méi)有介紹次屠,但是限于文章篇幅就講到這里了吧。本文出現(xiàn)的很多例子都并非本人原創(chuàng)的雳刺,多數(shù)出于 PHP 官方手冊(cè)(每個(gè)函數(shù)功能下面的評(píng)論里都有很多大神提出一些厲害的用法劫灶,部分示例就是出自評(píng)論)。在下只是拾人牙慧掖桦,將其總結(jié)了一下本昏。另外文章中若出現(xiàn)錯(cuò)誤,希望大家能夠指出枪汪,若有疑問(wèn)可以互相討論:-D涌穆。

以上內(nèi)容希望幫助到大家怔昨,很多PHPer在進(jìn)階的時(shí)候總會(huì)遇到一些問(wèn)題和瓶頸,業(yè)務(wù)代碼寫(xiě)多了沒(méi)有方向感宿稀,不知道該從那里入手去提升趁舀,對(duì)此我整理了一些資料,包括但不限于:分布式架構(gòu)祝沸、高可擴(kuò)展矮烹、高性能、高并發(fā)罩锐、服務(wù)器性能調(diào)優(yōu)奉狈、TP6,laravel涩惑,YII2仁期,Redis,Swoole竭恬、Swoft跛蛋、Kafka、Mysql優(yōu)化萍聊、shell腳本问芬、Docker悦析、微服務(wù)寿桨、Nginx等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨需要的可以免費(fèi)分享給大家,需要的可以點(diǎn)擊進(jìn)入暗號(hào):知乎强戴。

喜歡我的文章就關(guān)注我吧亭螟,持續(xù)更新中.....
喜歡我的文章就點(diǎn)贊關(guān)注吧

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骑歹,隨后出現(xiàn)的幾起案子预烙,更是在濱河造成了極大的恐慌,老刑警劉巖道媚,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁掸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡最域,警方通過(guò)查閱死者的電腦和手機(jī)谴分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)镀脂,“玉大人牺蹄,你說(shuō)我怎么就攤上這事”〕幔” “怎么了沙兰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵氓奈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鼎天,道長(zhǎng)舀奶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任训措,我火速辦了婚禮伪节,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绩鸣。我一直安慰自己怀大,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布呀闻。 她就那樣靜靜地躺著化借,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捡多。 梳的紋絲不亂的頭發(fā)上蓖康,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音垒手,去河邊找鬼蒜焊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛科贬,可吹牛的內(nèi)容都是我干的泳梆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼榜掌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼优妙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起憎账,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤套硼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后胞皱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體邪意,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年反砌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溉痢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片餐曹。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡情屹,死狀恐怖消请,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤做入,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布冒晰,位于F島的核電站,受9級(jí)特大地震影響竟块,放射性物質(zhì)發(fā)生泄漏壶运。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一浪秘、第九天 我趴在偏房一處隱蔽的房頂上張望蒋情。 院中可真熱鬧,春花似錦耸携、人聲如沸棵癣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狈谊。三九已至,卻和暖如春沟沙,著一層夾襖步出監(jiān)牢的瞬間河劝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工矛紫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赎瞎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓颊咬,卻偏偏與公主長(zhǎng)得像务甥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贪染,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354