内容简介:精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。
本文来自GitHub开源项目
30秒的 PHP 代码片段
精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。
排列
all
如果所提供的函数返回 true
的数量等于数组中成员数量的总和,则函数返回 true
,否则返回 false
。
function all($items, $func) { return count(array_filter($items, $func)) === count($items); }
Examples
all([2, 3, 4, 5], function ($item) { return $item > 1; }); // true
any
如果提供的函数对数组中的至少一个元素返回 true
,则返回 true
,否则返回 false
。
function any($items, $func) { return count(array_filter($items, $func)) > 0; }
Examples
any([1, 2, 3, 4], function ($item) { return $item < 2; }); // true
deepFlatten(深度平铺数组)
将多维数组转为一维数组
function deepFlatten($items) { $result = []; foreach ($items as $item) { if (!is_array($item)) { $result[] = $item; } else { $result = array_merge($result, deepFlatten($item)); } } return $result; }
Examples
deepFlatten([1, [2], [[3], 4], 5]); // [1, 2, 3, 4, 5]
drop
返回一个新数组,并从左侧弹出 n
个元素。
function drop($items, $n = 1) { return array_slice($items, $n); }
Examples
drop([1, 2, 3]); // [2,3] drop([1, 2, 3], 2); // [3]
findLast
返回所提供的函数为其返回的有效值(即过滤后的值)的最后一个元素的键值( value
)。
function findLast($items, $func) { $filteredItems = array_filter($items, $func); return array_pop($filteredItems); }
Examples
findLast([1, 2, 3, 4], function ($n) { return ($n % 2) === 1; }); // 3
findLastIndex
返回所提供的函数为其返回的有效值(即过滤后的值)的最后一个元素的键名( key
)。
function findLastIndex($items, $func) { $keys = array_keys(array_filter($items, $func)); return array_pop($keys); }
Examples
findLastIndex([1, 2, 3, 4], function ($n) { return ($n % 2) === 1; }); // 2
flatten(平铺数组)
将数组降为一维数组
function flatten($items) { $result = []; foreach ($items as $item) { if (!is_array($item)) { $result[] = $item; } else { $result = array_merge($result, array_values($item)); } } return $result; }
Examples
flatten([1, [2], 3, 4]); // [1, 2, 3, 4]
groupBy
根据给定的函数对数组的元素进行分组。
function groupBy($items, $func) { $group = []; foreach ($items as $item) { if ((!is_string($func) && is_callable($func)) || function_exists($func)) { $key = call_user_func($func, $item); $group[$key][] = $item; } elseif (is_object($item)) { $group[$item->{$func}][] = $item; } elseif (isset($item[$func])) { $group[$item[$func]][] = $item; } } return $group; }
Examples
groupBy(['one', 'two', 'three'], 'strlen'); // [3 => ['one', 'two'], 5 => ['three']]
hasDuplicates(查重)
检查数组中的重复值。如果存在重复值,则返回 true
;如果所有值都是唯一的,则返回 false
。
function hasDuplicates($items) { return count($items) > count(array_unique($items)); }
Examples
hasDuplicates([1, 2, 3, 4, 5, 5]); // true
head
返回数组中的第一个元素。
function head($items) { return reset($items); }
Examples
head([1, 2, 3]); // 1
last
返回数组中的最后一个元素。
function head($items) { return reset($items); }
Examples
last([1, 2, 3]); // 3
pluck
检索给定键名的所有键值
function pluck($items, $key) { return array_map( function($item) use ($key) { return is_object($item) ? $item->$key : $item[$key]; }, $items); }
Examples
pluck([ ['product_id' => 'prod-100', 'name' => 'Desk'], ['product_id' => 'prod-200', 'name' => 'Chair'], ], 'name'); // ['Desk', 'Chair']
pull
修改原始数组以过滤掉指定的值。
function pull(&$items, ...$params) { $items = array_values(array_diff($items, $params)); return $items; }
Examples
$items = ['a', 'b', 'c', 'a', 'b', 'c']; pull($items, 'a', 'c'); // $items will be ['b', 'b']
reject
使用给定的回调筛选数组。
function reject($items, $func) { return array_values(array_diff($items, array_filter($items, $func))); }
Examples
reject(['Apple', 'Pear', 'Kiwi', 'Banana'], function ($item) { return strlen($item) > 4; }); // ['Pear', 'Kiwi']
remove
从给定函数返回 false
的数组中删除元素。
function remove($items, $func) { $filtered = array_filter($items, $func); return array_diff_key($items, $filtered); }
Examples
remove([1, 2, 3, 4], function ($n) { return ($n % 2) === 0; }); // [0 => 1, 2 => 3]
tail
返回数组中的所有元素,第一个元素除外。
function tail($items) { return count($items) > 1 ? array_slice($items, 1) : $items; }
Examples
tail([1, 2, 3]); // [2, 3]
take
返回一个数组,其中从开头删除了 n
个元素。
function take($items, $n = 1) { return array_slice($items, 0, $n); }
Examples
take([1, 2, 3], 5); // [1, 2, 3] take([1, 2, 3, 4, 5], 2); // [1, 2]
without
筛选出给定值之外的数组元素。
function without($items, ...$params) { return array_values(array_diff($items, $params)); }
Examples
without([2, 1, 2, 3, 5, 8], 1, 2, 8); // [3, 5]
orderBy
按键名对数组或对象的集合进行排序。
function orderBy($items, $attr, $order) { $sortedItems = []; foreach ($items as $item) { $key = is_object($item) ? $item->{$attr} : $item[$attr]; $sortedItems[$key] = $item; } if ($order === 'desc') { krsort($sortedItems); } else { ksort($sortedItems); } return array_values($sortedItems); }
Examples
orderBy( [ ['id' => 2, 'name' => 'Joy'], ['id' => 3, 'name' => 'Khaja'], ['id' => 1, 'name' => 'Raja'] ], 'id', 'desc' ); // [['id' => 3, 'name' => 'Khaja'], ['id' => 2, 'name' => 'Joy'], ['id' => 1, 'name' => 'Raja']]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程之美:微软技术面试心得
《编程之美》小组 / 电子工业出版社 / 2018-9 / 79
《编程之美:微软技术面试心得》收集了约60道算法和程序设计的题目,这些题目大部分在微软的笔试、面试中出现过,有的曾被微软员工热烈地讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题、分析问题、解决问题,寻找更优的解法。《编程之美:微软技术面试心得》内容分为以下几个部分。 游戏之乐:从游戏和其他有趣问题出发,化繁为简,分析总结。 数字之魅:编程的过程实际上就是和数字及字符打交道的......一起来看看 《编程之美:微软技术面试心得》 这本书的介绍吧!