PHP里面最强大的工具,就是数组,它融合了多种数据结构的特点,数组、队列、栈、哈希表等等,而且容器可以兼容各种类型,任意嵌套,简直无所不能。围绕着数组,PHP原生支持了一些列的函数,使得数组在实际编程实践中,可以有更强的表达能力和更高的编程效率。但是这要求我们用PHP的方式去思考,尽量使用PHP原生的函数解决问题,而不是掌握了一个foreach就一招鲜吃遍天。

本文谈论的就是一个数组函数,array_reduce,我在文章的标题中,使用了“降维”这个词语,因为我联想到了《三体》里面的维度攻击,能把三维变二维,实现毁灭性打击,array_reduce当然不是攻击用的,但是array_reduce可以帮助我们实现降维,将一维数组“降维”成单一字符串。当然,array_reduce的可以但不仅限于实现这个功能,这取决于运用过程中,程序员对问题的抽象能力。

这里讲一种应用场景:从数据库中按照某种条件,取出一组记录,然后按照某种规则,将某个特定字段,拼接成一个单一字符串。举个简单的例子,比如我们常见的联表查询,如果两张表,位于不同的DB,不同的物理机,甚至是通过开放API拉取回来的数据,那么我们可能没法使用简单的联表查询,只能分步骤查询,先查询一个结果集,将结果集主键拼接成IN语句,再到另一个DB去查询结果集。

……

$results1

=

fetch_results

(

$db

,

$sql

)

;

$ids

=

array

(

)

;

foreach

(

$results1

as

$record

)

{

$ids

[

]

=

$record

[

'

id

'

]

;

}

$sql

=

"

SELECT * FROM tbl_another_table WHERE post_id IN (

"

.

implode

(

'

,

'

,

$ids

)

.

"

)

"

;

$results2

=

fetch_results

(

$other_db

,

$sql

)

;

……

这是非常常见的一种写法,思路非常自然、直接,也未见什么冗余,但是我觉得,这不是PHP思考问题的方式。PHP的思考方式,是像这样:

function

test

(

)

{

……

$results1

=

fetch_results

(

$db

,

$sql

)

;

$ids

=

trim

(

array_reduce

(

$results1

,

'

retrive_ids

'

)

,

'

,

'

)

;

$sql

=

"

SELECT * FROM tbl_another_table WHERE post_id IN (

$ids

)

"

;

$results2

=

fetch_results

(

$other_db

,

$sql

)

;

……

}

function

retrieve_ids

(

&

$ids

,

$record

)

{

return

$ids

.

'

,

'

.

$record

[

'

id

'

]

;

}

我可能没法证明,第二种写法,比第一种写法要高多少效率,减少多少运行时间,但是我更提倡第二种写法,因为第二种写法,是按照PHP的方式在思考问题,提供了更好的语义,更强的表达,retrieve_ids函数还可以复用在类似的场景里。很多情况下,函数里大段的foreach遍历,都并非为了表达业务本身,而只是为了取得某种中间结果,而PHP提供了工具,帮助我们避免这种局面,而让自己的代码更加简洁易读。这并非炫耀什么奇技淫巧,这只是PHP自己的正常的方式而已。

php array_reduce 降维,使用array_reduce降维相关推荐

  1. python降维之时间类型数据的处理_使用Python进行数据降维|线性降维

    前言 为什么要进行数据降维?直观地好处是维度降低了,便于计算和可视化,其深层次的意义在于有效信息的提取综合及无用信息的摈弃,并且数据降维保留了原始数据的信息,我们就可以用降维的数据进行机器学习模型的训 ...

  2. pca降维算法java_PCA 降维算法详解 以及代码示例

    1. 前言 PCA : principal component analysis ( 主成分分析) 最近发现我的一篇关于PCA算法总结以及个人理解的博客的访问量比较高, 刚好目前又重新学习了一下PCA ...

  3. 一、降维——机器学习笔记——降维(特征提取)

    目录 一.为什么要降维 1.降维的分类 2.示例 二.第一部分,线性降维方法 1.[PCA]主成分分析 2.[LDA]判别分析 3.[MDS]多维尺度分析 三.第二部分,非线性降维方法 1.[流形学习 ...

  4. python降维将多列数据压缩为一列_使用Python进行数据降维|线性降维

    前言 为什么要进行数据降维?直观地好处是维度降低了,便于计算和可视化,其深层次的意义在于有效信息的提取综合及无用信息的摈弃,并且数据降维保留了原始数据的信息,我们就可以用降维的数据进行机器学习模型的训 ...

  5. python降维方法_使用Python进行数据降维|线性降维

    ========== 欢迎关注文章首发公众号:早起python 本文为早起的统计工具箱第二期 ========== 前言 为什么要进行数据降维?直观地好处是维度降低了,便于计算和可视化,其深层次的意义 ...

  6. python怎么降维_【Python算法】常用降维方法-常用降维方法解读

    常用降维方法-常用降维方法解读 1. 引言 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原 ...

  7. python怎么降维_【Python算法】常用降维方法-常用降维方法的目的

    常用降维方法-常用降维方法的目的 正所谓每一个结果的出现都是一系列的原因导致的,当构建机器学习模型时候,有时候数据特征异常复杂,这就需要经常用到数据降维技术,下面主要介绍一些降维的主要原理. 1. 降 ...

  8. 新兴机器学习算法:从无监督降维到监督降维

    1.前言 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表 ...

  9. 【数据降维】数据降维方法分类

    数据降维基本原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间,从而获得一个关于原数据集紧致的低维表示. 数据降维工具箱drtoolbox中众多算法,这里简单做个分类. 因为很多并没有仔细 ...

最新文章

  1. word取消“在页面视图中显示页面间空白”后,关闭打开又自动勾上
  2. 基于RTP的h.264视频传输系统(二)
  3. C++返回引用,使用引用接收和非引用接收的区别
  4. 求实数的绝对值。_例谈六种有关绝对值问题的解题方法
  5. ABP vNext微服务架构详细教程——简介
  6. echarts如何显示在页面上
  7. MySQL的InnoDB和MyISAM比较
  8. missfresh问题记录
  9. shell整理(34)===date 命令的小脚本
  10. Web API开发实例——对产品Product进行增删改查
  11. linux内核IO模块plug/unplug机制
  12. 【2022新版】全套Java教程-300集完整版
  13. 安装linux取消硬盘密码设置,Linux Deepin安装到硬盘图文过程
  14. 计算机英语ppt答辩,计算机专业毕业论文答辩(英文)详解.ppt
  15. 荣耀笔记本linux版硬盘分区,荣耀MagicBook硬盘分区详细教程
  16. 苹果放弃Intel基带应是大概率事件
  17. SN74LVC1G08DBVR
  18. 背着房贷被裁员是一种什么样的体验?
  19. 富途最新股权曝光:腾讯持股21% 李华有67.4%投票权
  20. 预防跌倒-笑做“不倒翁”

热门文章

  1. 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店客房管理系统
  2. 【JVM】Java虚拟机
  3. JavaScript--动态添加元素
  4. navicat链接mysql
  5. js 支持的原始数据类型
  6. Android UI:机智的远程动态更新策略
  7. iOS7,8 presentViewController 执行慢
  8. 绑定下拉菜单的通用方法
  9. html之CSS设计(四种引入方式、各种选择器)
  10. tdbgrid 数据类型输入错误 vb_VB编程从起始到普及历程了解一下