php中使用array reduce給陣列降維

2022-07-08 10:30:18 字數 1323 閱讀 9087

php裡面最強大的工具,就是陣列,它融合了多種資料結構的特點,陣列、佇列、棧、雜湊表等等,而且容器可以相容各種型別,任意巢狀,簡直無所不能。圍繞著陣列,php原生支援了一些列的函式,使得陣列在實際程式設計實踐中,可以有更強的表達能力和更高的程式設計效率。但是這要求我們用php的方式去思考,盡量使用php原生的函式解決問題,而不是掌握了乙個foreach就一招鮮吃遍天。

本文談論的就是乙個陣列函式,array_reduce,我在文章的標題中,使用了「降維」這個詞語,因為我聯想到了《三體》裡面的維度攻擊,能把三維變二維,實現毀滅性打擊,array_reduce當然不是攻擊用的,但是array_reduce可以幫助我們實現降維,將一維陣列「降維」成單一字串。當然,array_reduce的可以但不僅限於實現這個功能,這取決於運用過程中,程式設計師對問題的抽象能力。

這裡講一種應用場景:從資料庫中按照某種條件,取出一組記錄,然後按照某種規則,將某個特定字段,拼接成乙個單一字串。舉個簡單的例子,比如我們常見的聯表查詢,如果兩張表,位於不同的db,不同的物理機,甚至是通過開放api拉取回來的資料,那麼我們可能沒法使用簡單的聯表查詢,只能分步驟查詢,先查詢乙個結果集,將結果集主鍵拼接成in語句,再到另乙個db去查詢結果集。

1

<?php2……

3$results1 = fetch_results($db, $sql);4

$ids = array

();5

foreach ($results1

as$record) 8

9$sql = "select * from tbl_another_table where post_id in (" .implode(',', $ids) .")";

10$results2 = fetch_results($other_db, $sql);

這是非常常見的一種寫法,思路非常自然、直接,也未見什麼冗餘,但是我覺得,這不是php思考問題的方式。php的思考方式,是像這樣:

1

<?php

2function

test()

1213

function retrieve_ids(&$ids, $record

)

我可能沒法證明,第二種寫法,比第一種寫法要高多少效率,減少多少執行時間,但是我更提倡第二種寫法,因為第二種寫法,是按照php的方式在思考問題,提供了更好的語義,更強的表達,retrieve_ids函式還可以復用在類似的場景裡。很多情況下,函式裡大段的foreach遍歷,都並非為了表達業務本身,而只是為了取得某種中間結果,而php提供了工具,幫助我們避免這種局面,而讓自己的**更加簡潔易讀。這並非炫耀什麼奇技淫巧,這只是php自己的正常的方式而已。

php中使用mysql介紹 PHP中使用MySQL

mysql資料庫的擴充套件 擴充套件庫基本功能相似,用法基本相同,會增加一些新的特性 mysqli擴充套件庫 只能對mysql資料庫操作 pdo擴充套件 可以操作很多態別的資料庫 wamp下修改mysql資料庫密碼 三者在建立連線上的比較 pdo需要四個引數,除了資料庫管理員名稱 密碼 host 還...

PHP中使用儲存過程

下面是乙個簡單的存貯過程 create procedure sp mystoreprocedure as select host,user,password from user define oledb connection string provider sqloledb data source ...

在php中使用Sphinx

要使用php連線sphinx進行全文搜尋,有兩種方式 將sphinx作為php擴充套件安裝,這種方式比較麻煩,此處不介紹 在sphinx原始碼目錄下的有個api sphinxapi.php,將此檔案reqire到你的php中,即可呼叫api方法進行全文搜尋 require sphinxapi.php...