puddingpp 2019-06-28
3年来都没有动手跑一跑PHP内置的Array函数。
这一跑才发现平时自鸣得意的那些算法是有原生实现的,顿时有一种啪啪啪被打脸的感觉。
希望亡羊补牢,为时不晚吧。
下面是从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 [email protected] */ $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);