30秒的PHP代码片段(1)数组 - Array

栏目: PHP · 发布时间: 5年前

内容简介:精选的有用PHP片段集合,您可以在30秒或更短的时间内理解这些片段。

本文来自GitHub开源项目

点我跳转

30秒的 PHP 代码片段

30秒的PHP代码片段(1)数组 - Array

精选的有用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']]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算理论导论

计算理论导论

塞普斯 / 机械工业出版社 / 2002-8 / 39.0

This book——by a noted authority and educator in the field——presents computer science theory from a uniquely intuitive,“big picture”perspective.The author grounds his clear and interesting study on ......一起来看看 《计算理论导论》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具