Laravel - 数组函数

引入包

use Illuminate\Support\Arr;

一、检查给定的值是否可数组式访问

Arr::accessible(['a' => 1, 'b' => 2]);// true

二、数组添加 

Arr::add(['name' => 'Desk'], 'price', 100) ;// ['name' => 'Desk', 'price' => 100]
Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);// ['name' => 'Desk', 'price' => 100] 若添加的键值存在并且值为null,则会将null改为修改的值

三、数组修改

$array = ['products' => ['desk' => ['price' => 100]]];
Arr::set($array, 'products.desk.price', 200); // ['products' => ['desk' => ['price' => 200]]]

四、 数组删除

         1.根据键值删除数组

Arr::except(['name' => 'Desk', 'price' => 100], ['price']);
// ['name' => 'Desk']

         2.从嵌套的数组中删除给定的键值对

Arr::forget(['products' => ['desk' => ['price' => 100]]], 'products.desk');
//['products' => []]

 五、查询

        1.判断数组中指定键值是否存在

Arr::exists(['name' => 'John Doe', 'age' => 17], 'name');// true

        2. 判断数组中是否存在指定的一个或多个键

$array = ['product' => ['name' => 'Desk', 'price' => 100]]; 

$contains = Arr::has($array, 'product.name');// true 

$contains = Arr::has($array, ['product.price', 'product.discount']);// false

        3.根据指定键查询数组,返回数组的值

$array = ['products' => ['desk' => ['price' => 100]]];

$price = Arr::get($array, 'products.desk.price');// 100

//函数也可以接受一个默认值,如果没有找到特定的键,将返回默认值
$discount = Arr::get($array, 'products.desk.discount', 0); //0

         4.返回数组中满足指定条件的第一个/最后一个元素

$array = [100, 200, 300];

$first = Arr::first($array, function ($value, $key) {
    return $value >= 150;
});// 200

//将默认值作为第三个参数传递给该方法,如果没有值满足条件,则返回该默认值:
$first = Arr::first($array, $callback, $default);


//函数返回数组中满足指定条件的最后一个元素用 last 
$last = Arr::last($array, function ($value, $key) {
    return $value >= 150;
}); //300

        5.根据条件查询数组 

$array = [100, '200', 300, '400', 500];

$filtered = Arr::where($array, function ($value, $key) {
    return is_string($value);
}); 
// [1 => '200', 3 => '400']

         6.根据指定的键查询数组,返回键值对(数组)

$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];

$slice = Arr::only($array, ['name', 'price']); 
// ['name' => 'Desk', 'price' => 100]

         7.根据指定的键,返回所有值(数组)

array = [
['developer' => ['id' => 1, 'name' => 'Taylor']],
['developer' => ['id' => 2, 'name' => 'Abigail']],
];

$names = Arr::pluck($array, 'developer.name'); 
// ['Taylor', 'Abigail']

##可以指定结果的键
$names = Arr::pluck($array, 'developer.name', 'developer.id'); 
// [1 => 'Taylor', 2 => 'Abigail']

         8.从数组中随机返回一个或多个值

$array = [1, 2, 3, 4, 5];

$random = Arr::random($array);
//4

$items = Arr::random($array, 2);
// [2, 5]  返回数组

 六、数组操作

        1.数组合并

Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);
//[1, 2, 3, 4, 5, 6, 7, 8, 9]

        2. 返回多个数组具有所有可能排列的笛卡尔乘积

Arr::crossJoin([1, 2], ['a', 'b']);
// [[1, 'a'],[1, 'b'],[2, 'a'],[2, 'b']]

        3.将多维数组中所有的 键 平铺到一维数组中,新数组使用「.」符号表示层级包含关系

Arr::dot(['products' => ['desk' => ['price' => 100]]]); 
// ['products.desk.price' => 100]

        4.将多维数组中数组的 值 取出平铺为一维数组 

Arr::flatten(['name' => 'Joe', 'languages' => ['PHP', 'Ruby']]); 
// ['Joe', 'PHP', 'Ruby']

        5.使用「点表示法」的一维数组扩展为多维数组 

$array = [
    'user.name' => 'Kevin Malone',
    'user.occupation' => 'Accountant',
];

$array = Arr::undot($array);

// ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]

七、排序 

        1.随机排序

$array = Arr::shuffle([1, 2, 3, 4, 5]);
// [3, 2, 5, 1, 4] 

        2. 根据数组的值大小进行排序

$array = ['Desk', 'Table', 'Chair'];
$sorted = Arr::sort($array);
// ['Chair', 'Desk', 'Table']

//根据给定回调函数返回的结果对数组进行排序
$array = [
    ['name' => 'Desk'],
    ['name' => 'Table'],
    ['name' => 'Chair'],
];

$sorted = array_values(Arr::sort($array, function ($value) {
    return $value['name'];
}));

/*
    [
        ['name' => 'Chair'],
        ['name' => 'Desk'],
        ['name' => 'Table'],
    ]
*/

        3.递归排序 

$array = [
    ['Roman', 'Taylor', 'Li'],
    ['PHP', 'Ruby', 'JavaScript'],
    ['one' => 1, 'two' => 2, 'three' => 3],
];

$sorted = Arr::sortRecursive($array);

/*
    [
        ['JavaScript', 'PHP', 'Ruby'],
        ['one' => 1, 'three' => 3, 'two' => 2],
        ['Li', 'Roman', 'Taylor'],
    ]
*/

八、其他 

        1.用于动态css赋值,根据给定的条件编译并返回 CSS 类字符串,为true 的返回

$isActive = false;
$hasError = true;
$array = ['p-4', 'font-bold' => $isActive, 'bg-red' => $hasError];
$classes = Arr::toCssClasses($array);
//'p-4 bg-red'

九、数组函数

        1.数组修改,给多维数组或对象设置缺少的值

data = ['products' => ['desk' => ['price' => 100]]];

data_fill($data, 'products.desk.price', 200);//未成功修改,值存在 ['products' => ['desk' => ['price' => 100]]]

data_fill($data, 'products.desk.discount', 10);
// ['products' => ['desk' => ['price' => 100, 'discount' => 10]]]

//此函数也可以接收「*」作为通配符,设置相应缺少的值
$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2'],
    ],
];
data_fill($data, 'products.*.price', 200);
/*
    [
        'products' => [
            ['name' => 'Desk 1', 'price' => 100],
            ['name' => 'Desk 2', 'price' => 200],
        ],
    ]
*/

        2. 数组修改,给多维数组或对象设置值

$data = ['products' => ['desk' => ['price' => 100]]];

data_set($data, 'products.desk.price', 200);// ['products' => ['desk' => ['price' => 200]]]

//支持使用「*」作为通配符给相应键名赋值:

$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2', 'price' => 150],
    ],
];

data_set($data, 'products.*.price', 200);

/*
    [
        'products' => [
            ['name' => 'Desk 1', 'price' => 200],
            ['name' => 'Desk 2', 'price' => 200],
        ],
    ]
*/

        3.根据指定的键查询数组的值,返回String

$data = ['products' => ['desk' => ['price' => 100]]];

$price = data_get($data, 'products.desk.price'); //100

//该函数也接受一个默认值,如果没有找到指定的键,将返回默认值:
$discount = data_get($data, 'products.desk.discount', 0);// 0

//该函数还接受「*」为通配符,来指向数组或对象的任何键:

$data = [
    'product-one' => ['name' => 'Desk 1', 'price' => 100],
    'product-two' => ['name' => 'Desk 2', 'price' => 150],
];

data_get($data, '*.name');// ['Desk 1', 'Desk 2'];

         4.返回数组中的第一个/最后一个值

$array = [100, 200, 300];
$first = head($array);// 100

//last 函数将返回数组中的最后一个值
$array = [100, 200, 300];
$last = last($array);// 300


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/602931.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣顺序表思路讲解

本篇文章,我给大家带来的是顺序表题目讲解,希望大家看完有所收获,废话不多说,我们现在开始 审题 大白话:给了一个数组和一个目标值。如果数组里的两个元素相加 目标值,则返回这两个元素的下标。那么大家需…

中霖教育:考下注册会计师能从事哪些工作?

考下注册会计师能够从事哪些工作? 1 企业从事会计和财务工作 大部分的CPA持证人,会在企业里,从事会计和财务工作。但是能拿到多少薪资,也要看你所进入的平台。如果是小企业,实力一般,也就几干块工资。如果…

AI大模型应用与实践指南

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

系统图表:洞察数据的价值与魅力

在数字化、信息化迅猛发展的今天,数据已经成为企业决策、科学研究、社会管理等领域的核心资源。而如何高效、准确地理解和利用这些数据,成为摆在我们面前的重要课题。系统图表作为数据可视化的重要呈现工具,不仅能帮助我们洞察数据的内在规律…

Transformer详解:从放弃到入门(完结)

前几篇文章中,我们已经拆开并讲解了Transformer中的各个组件。现在我们尝试使用这些方法实现Transformer的编码器。   如图所示,编码器(Encoder)由N个编码器块(Encoder Block)堆叠而成,我们依次实现。 class EncoderBlock(nn.Module):def …

粤港澳青少年信息学创新大赛 Python 编程竞赛(初中部分知识点整理)

一、考试大纲梳理 知识内容 知识目标 计算机基础与编程环境,历史,存储与网络变量定义和使用基本数据类型(整型,浮点型,字符型,布尔型),数据类型的转换控制语句结构(顺序…

车规级低功耗汽车用晶振SG-9101CGA

车规级晶振SG-9101CGA属于爱普生9101系列,是一款可编程晶振。SG-9101CGA车规级晶振采用2.5x2.0mm封装,利用PLL技术生产,此款振荡器的频率范围从0.67M~170MHZ任一频点可选,步进1ppm,采用标准CMOS输出,最大输…

极验4 一键解混淆

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,未经许可禁止转载,禁止任何修改后二次传播,如有侵权,可联系本文作者删除! AST简介 AST(Abstract Syntax Tree)&a…

【Redis7】10大数据类型之Zset类型

文章目录 1.Zset类型2.常用命令3.示例3.1 ZADD,ZRANGE和ZREVRANGE3.2 ZSCORE,ZCARD和ZREM3.3 ZRANGEBYSCORE和ZCOUNT3.4 ZRANK和ZREVRANK3.5 Redis7新命令ZMPOP 1.Zset类型 Redis的Zset(Sorted Set,有序集合)是一种特殊的数据结构&#xff0…

【教学类-18-03】20240508《蒙德里安“红黄蓝黑格子画”-A4横版》(大小格子)

作品展示 背景需求: 2年前制作了蒙德里安随机线条 【教学类-18-02】20221124《蒙德里安“红黄蓝黑格子画”-A4竖版》(大班)_蒙德里安模版-CSDN博客文章浏览阅读1k次。【教学类-18-02】20221124《蒙德里安“红黄蓝黑格子画”-A4竖版》(大班)…

ChIP-seq or CUTTag,谁能hold住蛋白质与DNA互作主战场?

DNA与蛋白质的相互作用作为表观遗传学中的一个重要领域,对理解基因表达调控、DNA复制与修复、表观遗传修饰(组蛋白修饰)及染色质结构等基本生命过程至关重要。 自1983年James Broach首次公布染色质免疫共沉淀(ChIP)技…

Docker-Compose 容器集群的快速编排

Docker-compose 简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service)以及容器&…

LLM 安全 | 大语言模型应用安全入门

一、背景 2023年以来,LLM 变成了相当炙手可热的话题,以 ChatGPT 为代表的 LLM 的出现,让人们看到了无限的可能性。ChatGPT能写作,能翻译,能创作诗歌和故事,甚至能一定程度上做一些高度专业化的工作&#x…

滤除纹波的方法:

空载时看起来纹波比较小但是一加负载的时候纹波一下子上来是因为空载时候电流比较小MOS大部分时间处于关断状态,而加上负载后电流变大MOS打开关闭更为频繁,因而纹波更大。 下图中的尖峰可能是因为电路的寄生电感导致的,理论上只能削弱不能避…

LINUX 入门 8

LINUX 入门 8 day10 20240507 耗时:90min 有点到倦怠期了 课程链接地址 第8章 TCP服务器 1 TCP服务器的介绍 开始讲服务器端,之前是客户端DNShttps请求 基础:网络编程并发服务器:多客户端 一请求,一线程 veryold…

推荐网站(6)33台词,通过台词找电影、电视剧、纪录片等素材

今天推荐一个网站33台词,你可以根据电影、电视剧、纪录片等某一段台词,来找到来源,帮你精确到多少分多少秒出现的,非常的好用,尤其是对那种只记得一些经典台词,不知道是哪个电影的人来说,帮助巨…

揭秘全网热门话题:抖音快速涨粉方法,巨量千川投流助你日增10000粉

在当今社交媒体的时代( 千川投流:hzzxar)抖音成为了年轻人分享自己才华和生活的平台。然而,要在抖音上快速获得关注和粉丝,却不是一件容易的事情。今天,我们将揭秘全网都在搜索的抖音快速涨1000粉的秘籍,带…

网络文件共享

存储类型分三类 直连式存储:DAS存储区域网络:SAN网络附加存储:NAS 三种存储架构的应用场景 DAS虽然比较古老了,但是还是很适用于那些数据量不大,对磁盘访问速度要求较高的中小企业SAN多适用于文件服务器&#xff0c…

pyfilesystem2,一个超级实用的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个超级实用的 Python 库 - pyfilesystem2。 Github地址:https://github.com/pyfilesystem/pyfilesystem2 PyFilesystem2是一个强大的Python库,用于抽象化文件系统操作。它…

静态分析-RIPS-源码解析记录-02

这部分主要分析scanner.php的逻辑,在token流重构完成后,此时ini_get是否包含auto_prepend_file或者auto_append_file 取出的文件路径将和tokens数组结合,每一个文件都为一个包含require文件名的token数组 接着回到main.php中,此时…
最新文章