PHP数组操作类
class
ArrayHelper{
/**
* 从数组中删除空白的元素(包括只有空白字符的元素)
*
* 用法:
* @code php
* $arr = array('', 'test', ' ');
* ArrayHelper::removeEmpty($arr);
*
* dump($arr);
* // 输出结果中将只有 'test'
* @endcode
*
* @param array $arr 要处理的数组
* @param boolean $trim 是否对数组元素调用 trim 函数
*/
static
function
removeEmpty(&
$arr
,
$trim
= TRUE)
{
foreach
(
$arr
as
$key
=>
$value
)
{
if
(
is_array
(
$value
))
{
self::removeEmpty(
$arr
[
$key
]);
}
else
{
$value
= trim(
$value
);
if
(
$value
==
''
)
{
unset(
$arr
[
$key
]);
}
elseif
(
$trim
)
{
$arr
[
$key
] =
$value
;
}
}
}
}
/**
* 从一个二维数组中返回指定键的所有值
*
* 用法:
* @code php
* $rows = array(
* array('id' => 1, 'value' => '1-1'),
* array('id' => 2, 'value' => '2-1'),
* );
* $values = ArrayHelper::getCols($rows, 'value');
*
* dump($values);
* // 输出结果为
* // array(
* // '1-1',
* // '2-1',
* // )
* @endcode
*
* @param array $arr 数据源
* @param string $col 要查询的键
*
* @return array 包含指定键所有值的数组
*/
static
function
getCols(
$arr
,
$col
)
{
$ret
=
array
();
foreach
(
$arr
as
$row
)
{
if
(isset(
$row
[
$col
])) {
$ret
[] =
$row
[
$col
];
}
}
return
$ret
;
}
/**
* 将一个二维数组转换为 HashMap,并返回结果
*
* 用法1:
* @code php
* $rows = array(
* array('id' => 1, 'value' => '1-1'),
* array('id' => 2, 'value' => '2-1'),
* );
* $hashmap = ArrayHelper::toHashmap($rows, 'id', 'value');
*
* dump($hashmap);
* // 输出结果为
* // array(
* // 1 => '1-1',
* // 2 => '2-1',
* // )
* @endcode
*
* 如果省略 $valueField 参数,则转换结果每一项为包含该项所有数据的数组。
*
* 用法2:
* @code php
* $rows = array(
* array('id' => 1, 'value' => '1-1'),
* array('id' => 2, 'value' => '2-1'),
* );
* $hashmap = ArrayHelper::toHashmap($rows, 'id');
*
* dump($hashmap);
* // 输出结果为
* // array(
* // 1 => array('id' => 1, 'value' => '1-1'),
* // 2 => array('id' => 2, 'value' => '2-1'),
* // )
* @endcode
*
* @param array $arr 数据源
* @param string $keyField 按照什么键的值进行转换
* @param string $valueField 对应的键值
*
* @return array 转换后的 HashMap 样式数组
*/
static
function
toHashmap(
$arr
,
$keyField
,
$valueField
= NULL)
{
$ret
=
array
();
if
(
$valueField
)
{
foreach
(
$arr
as
$row
)
{
$ret
[
$row
[
$keyField
]] =
$row
[
$valueField
];
}
}
else
{
foreach
(
$arr
as
$row
)
{
$ret
[
$row
[
$keyField
]] =
$row
;
}
}
return
$ret
;
}
/**
* 将一个二维数组按照指定字段的值分组
*
* 用法:
* @endcode
*
* @param array $arr 数据源
* @param string $keyField 作为分组依据的键名
*
* @return array 分组后的结果
*/
static
function
groupBy(
$arr
,
$keyField
)
{
$ret
=
array
();
foreach
(
$arr
as
$row
)
{
$key
=
$row
[
$keyField
];
$ret
[
$key
][] =
$row
;
}
return
$ret
;
}
/**
* 将一个平面的二维数组按照指定的字段转换为树状结构
*
*
* 如果要获得任意节点为根的子树,可以使用 $refs 参数:
* @code php
* $refs = null;
* $tree = ArrayHelper::tree($rows, 'id', 'parent', 'nodes', $refs);
*
* // 输出 id 为 3 的节点及其所有子节点
* $id = 3;
* dump($refs[$id]);
* @endcode
*
* @param array $arr 数据源
* @param string $keyNodeId 节点ID字段名
* @param string $keyParentId 节点父ID字段名
* @param string $keyChildrens 保存子节点的字段名
* @param boolean $refs 是否在返回结果中包含节点引用
*
* return array 树形结构的数组
*/
static
function
toTree(
$arr
,
$keyNodeId
,
$keyParentId
=
'parent_id'
,
$keyChildrens
=
'childrens'
, &
$refs
= NULL)
{
$refs
=
array
();
foreach
(
$arr
as
$offset
=>
$row
)
{
$arr
[
$offset
][
$keyChildrens
] =
array
();
$refs
[
$row
[
$keyNodeId
]] =&
$arr
[
$offset
];
}
$tree
=
array
();
foreach
(
$arr
as
$offset
=>
$row
)
{
$parentId
=
$row
[
$keyParentId
];
if
(
$parentId
)
{
if
(!isset(
$refs
[
$parentId
]))
{
$tree
[] =&
$arr
[
$offset
];
continue
;
}
$parent
=&
$refs
[
$parentId
];
$parent
[
$keyChildrens
][] =&
$arr
[
$offset
];
}
else
{
$tree
[] =&
$arr
[
$offset
];
}
}
return
$tree
;
}
/**
* 将树形数组展开为平面的数组
*
* 这个方法是 tree() 方法的逆向操作。
*
* @param array $tree 树形数组
* @param string $keyChildrens 包含子节点的键名
*
* @return array 展开后的数组
*/
static
function
treeToArray(
$tree
,
$keyChildrens
=
'childrens'
)
{
$ret
=
array
();
if
(isset(
$tree
[
$keyChildrens
]) &&
is_array
(
$tree
[
$keyChildrens
]))
{
foreach
(
$tree
[
$keyChildrens
]
as
$child
)
{
$ret
=
array_merge
(
$ret
, self::treeToArray(
$child
,
$keyChildrens
));
}
unset(
$node
[
$keyChildrens
]);
$ret
[] =
$tree
;
}
else
{
$ret
[] =
$tree
;
}
return
$ret
;
}
/**
* 根据指定的键对数组排序
*
* @endcode
*
* @param array $array 要排序的数组
* @param string $keyname 排序的键
* @param int $dir 排序方向
*
* @return array 排序后的数组
*/
static
function
sortByCol(
$array
,
$keyname
,
$dir
= SORT_ASC)
{
return
self::sortByMultiCols(
$array
,
array
(
$keyname
=>
$dir
));
}
/**
* 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY
*
* 用法:
* @code php
* $rows = ArrayHelper::sortByMultiCols($rows, array(
* 'parent' => SORT_ASC,
* 'name' => SORT_DESC,
* ));
* @endcode
*
* @param array $rowset 要排序的数组
* @param array $args 排序的键
*
* @return array 排序后的数组
*/
static
function
sortByMultiCols(
$rowset
,
$args
)
{
$sortArray
=
array
();
$sortRule
=
''
;
foreach
(
$args
as
$sortField
=>
$sortDir
)
{
foreach
(
$rowset
as
$offset
=>
$row
)
{
$sortArray
[
$sortField
][
$offset
] =
$row
[
$sortField
];
}
$sortRule
.=
'$sortArray[\''
.
$sortField
.
'\'], '
.
$sortDir
.
', '
;
}
if
(
empty
(
$sortArray
) ||
empty
(
$sortRule
)) {
return
$rowset
;
}
eval
(
'array_multisort('
.
$sortRule
.
'$rowset);'
);
return
$rowset
;
}
}
PHP数组操作类的更多相关文章
- php 数组操作类(整合 给意见)
数组操作函数整理: /* 将一个二维数组按照指定字段的值分组 * * @param array $arr * @param string $keyField * * @return array */ ...
- jQuery自定义数组操作类(类似于List集合的增删改查)
js外部文件,前提需要引入jquery类库. 封装类代码如下: (function ($) { $.List = function () { var _list = new A ...
- Java数组操作类
最近又重新在看慕课网的数据结构,然后把示例代码整理一下. public class Array<E> { private E[] data; private int count = 0; ...
- 菜鸡的Java笔记 实践 - java 数组操作
讲解一个继承的实现思路 要求定义一个数组操作类(Array类),在这个类里面可以进行整型数组的操作,由外部传入数组的大小 ,并且要求实现数据的保存以及数据的 ...
- JQuery操作类数组的工具方法
JQuery学习之操作类数组的工具方法 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$('div')将返回div里面的所有div元素包装的JQuery对象.在这中情况 ...
- jQuery_03之事件、动画、类数组操作
一.事件: 1.模式触发事件: ①DOM:elem.onXXX();只能触发直接用onXXX绑定的事件处理函数:用addEventistener添加的事件监听无法模拟出发触发: ②jQuery:$ ...
- PHP多维数组元素操作类
我的框架里面一个多维数组元素操作类,主要用于读取数组中配置数据,可以通过字符串节点的方式:a.b.c 来获取和设置元素,以及多维数组的覆盖,有需求的可以参考下吧! <?php /** * Cre ...
- C++走向远洋——38(用对象数组操作长方柱类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:changfangzhu.cpp * 作者:常轩 * 微信公众号 ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
随机推荐
- wordpress防止垃圾邮件方法
wordpress防止垃圾邮件方法 安装NoSpamNX插件然后设置Operating mode 为 Block (recommended) save
- git clean解决 GIT error: The following untracked working tree files would be overwritten
git clean用法:https://www.cnblogs.com/lsgxeva/p/8540476.html :
- vue父子(父传子)传值
vue2.0中,实现父子组件间的传值,需要依靠一个props的属性,作为变量接收的对象. 注:vue.js文件引用的是本地的js文件,拷贝本机运行时,可以使用cnd替换. https://www.bo ...
- sqlException 使用relace 替换单引号
我们从前端输入数据的时候,可能会输入一些 单引号 ,的字符 导致直接进行执行sql 语句保存的时候出现错误 如: 输入的有 单引号 保存按钮小代码 <asp:Button ID="bt ...
- IAR_STM32_CCM内存使用
在IAR中,硬件环境为STM32F464单片机,额外的CCM不能用DMA访问,但可以作为内部额外扩充RAM使用 修改文件中的内容为: define symbol __ICFEDIT_region_RO ...
- C++删除排序数组中的重复项
class Solution { public: int removeDuplicates(vector<int>& nums) { if (nums.empty()) { ; } ...
- Elasticsearch常见用法-分布式集群
集群内部工作方式 Elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展(vertical scale or scaling up))或者购买更多的服务器( ...
- SQL Server中COALESCE函数的用法
在SQL Server中COALESCE函数,会返回其参数中第一个不为NULL的参数,效果如下: SELECT COALESCE(NULL,NULL,N'A',NULL,NULL) 结果: SELEC ...
- oracle 根据字段分组取第一条数据及rank函数说明
当前有这样一个需求,根据外键对子表数据进行分组,取每组中的一条数据就行了,如图: 如:COMMANDID = 26的有两条,只取一条数据. sql语句: select * from(select SY ...
- c#NAudio 录音功能实现
在网上找了很多类似录音教程效果都不好,或根本不能录音,代码由网上借鉴修改(完整实现录音播放功能) 1.首先新建引用类 RecordController public class RecordCont ...