PHP教程

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

本文主要是介绍30 秒理解 PHP 代码片段(1)数组 - Array,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

排列

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(深度平铺数组)

将多维数组转为一维数组。

  1. function deepFlatten($items)

  2. {

  3.    $result = [];

  4.    foreach ($items as $item) {

  5.        if (!is_array($item)) {

  6.            $result[] = $item;

  7.        } else {

  8.            $result = array_merge($result, deepFlatten($item));

  9.        }

  10.    }


  11.    return $result;

  12. }

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)。

  1. function findLast($items, $func)

  2. {

  3.    $filteredItems = array_filter($items, $func);


  4.    return array_pop($filteredItems);

  5. }

Examples:

findLast([1, 2, 3, 4], function ($n) {
    return ($n % 2) === 1;
});
// 3
findLastIndex

返回所提供的函数为其返回的有效值(即过滤后的值)的最后一个元素的键名( key)。

  1. function findLastIndex($items, $func)

  2. {

  3.    $keys = array_keys(array_filter($items, $func));


  4.    return array_pop($keys);

  5. }

Examples:

findLastIndex([1, 2, 3, 4], function ($n) {
    return ($n % 2) === 1;
});
// 2
flatten(平铺数组)

将数组降为一维数组。

  1. function flatten($items)

  2. {

  3.    $result = [];

  4.    foreach ($items as $item) {

  5.        if (!is_array($item)) {

  6.            $result[] = $item;

  7.        } else {

  8.            $result = array_merge($result, array_values($item));

  9.        }

  10.    }


  11.    return $result;

  12. }

Examples:

flatten([1, [2], 3, 4]); // [1, 2, 3, 4]
groupBy

根据给定的函数对数组的元素进行分组。

  1. function groupBy($items, $func)

  2. {

  3.    $group = [];

  4.    foreach ($items as $item) {

  5.        if ((!is_string($func) && is_callable($func)) || function_exists($func)) {

  6.            $key = call_user_func($func, $item);

  7.            $group[$key][] = $item;

  8.        } elseif (is_object($item)) {

  9.            $group[$item->{$func}][] = $item;

  10.        } elseif (isset($item[$func])) {

  11.            $group[$item[$func]][] = $item;

  12.        }

  13.    }


  14.    return $group;

  15. }

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 last($items)
{
    return end($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

使用给定的回调筛选数组。

reject(['Apple', 'Pear', 'Kiwi', 'Banana'], function ($item) {
    return strlen($item) > 4;
}); // ['Pear', 'Kiwi']

Examples:

reject(['Apple', 'Pear', 'Kiwi', 'Banana'], function ($item) {
    return strlen($item) > 4;
}); // ['Pear', 'Kiwi']
remove

从给定函数返回 false的数组中删除元素。

  1. function remove($items, $func)

  2. {

  3.    $filtered = array_filter($items, $func);


  4.    return array_diff_key($items, $filtered);

  5. }

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

按键名对数组或对象的集合进行排序。

  1. function orderBy($items, $attr, $order)

  2. {

  3.    $sortedItems = [];

  4.    foreach ($items as $item) {

  5.        $key = is_object($item) ? $item->{$attr} : $item[$attr];

  6.        $sortedItems[$key] = $item;

  7.    }

  8.    if ($order === 'desc') {

  9.        krsort($sortedItems);

  10.    } else {

  11.        ksort($sortedItems);

  12.    }


  13.    return array_values($sortedItems);

  14. }

Examples:

(
    [
        ['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']]

相关文章

  • 30秒的PHP代码片段(2)数学 - Math

  • 30秒的PHP代码片段(3)字符串-String & 函数-Function


这篇关于30 秒理解 PHP 代码片段(1)数组 - Array的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!