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 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);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。