Demo源碼php
3年來都沒有動手跑一跑PHP內置的Array函數。git
這一跑才發現平時自鳴得意的那些算法是有原生實現的,頓時有一種啪啪啪被打臉的感受。github
但願亡羊補牢,爲時不晚吧。算法
下面是從Demo裏摘抄的概括對比片斷,但願對你有所啓發。數組
祝好。函數
/** * 8個計算數組差集的函數 * todo u有什麼用? * 只對比key: * array_diff_key() 經過對比key獲得數組的差集 * array_diff_ukey() 經過對比key得到數組的差集,key計算使用用戶自定義函數 * 只對比value: * array_diff() 經過對比value獲得數組的差集 * array_udiff() 經過對比value得到數組的差集,value計算使用用戶自定義函數 * 同時對比key和value: * array_diff_assoc() 同時對比key和value得到數組的差集 * array_diff_uassoc() 同時對比key和value得到數組的差集,key計算使用用戶自定義函數 * array_udiff_assoc() 同時對比key和value得到數組的差集,value計算使用用戶自定義函數 * array_udiff_uassoc() 同時對比key和value得到數組的差集,key和value計算使用用戶自定義函數 * diff表明對比value * 後面跟key,表明對比key * 後面跟assoc,表明同時對比key和value * udiff表示value對比使用自定義函數 * ukey表示key對比使用自定義函數 * uassoc表示key對比使用自定義函數 */ /** * 8個計算數組交集的函數 * todo u有什麼用? * 只對比key: * array_intersect_key() 經過對比key獲得數組的交集 * array_intersect_ukey() 經過對比key得到數組的交集,key計算使用用戶自定義函數 * 只對比value: * array_intersect() 經過對比value獲得數組的交集 * array_uintersect() 經過對比value得到數組的交集,value計算使用用戶自定義函數 * 同時對比key和value: * array_intersect_assoc() 同時對比key和value得到數組的交集 * array_intersect_uassoc() 同時對比key和value得到數組的交集,key計算使用用戶自定義函數 * array_uintersect_assoc() 同時對比key和value得到數組的交集,value計算使用用戶自定義函數 * array_uintersect_uassoc() 同時對比key和value得到數組的交集,key和value計算使用用戶自定義函數 * diff表明對比value * 後面跟key,表明對比key * 後面跟assoc,表明同時對比key和value * udiff表示value對比使用自定義函數 * ukey表示key對比使用自定義函數 * uassoc表示key對比使用自定義函數 * 如下只展現3個求交集最基礎的函數,另外5個省略 */ /** * 一共9個排序函數 * 只對key排序 * ksort * krsort * usort * 只對value排序 * sort * rsort * usort * 同時對key和value排序 * asort * arsort * uasort * k 按k排序 * r 倒序 * a 同時對key和value排序 * u 按用戶自定義函數排序 */ e.g. /** * array_filter * 用回調函數過濾數組中的單元 * 1. 返回結果保留key * 2. 三個參數,input_array、callback、flag * 3. input_array爲要過濾的函數 * 4. callback爲用戶自定義的過濾函數 * 5. flag有兩個值 * ARRAY_FILTER_USE_BOTH: 對應的callback有兩個參數 * ARRAY_FILTER_USE_KEY: 對應的callback只有一個參數 * 6. 此函數使用方式很是靈活,能夠作許多有趣的事情,好比去掉數組中重複的值和而且 * @return array * @author Sch0ng@163.com */ $arrayFilter = function () { $input_array = ['foo', false, -1, null, '', [], 0, 0.00]; $filtered_array = array_filter($input_array, function ($v, $k) { return $v; }, ARRAY_FILTER_USE_BOTH); return $filtered_array; }; self::printR($arrayFilter);