在drupal中关于数组的操作需求有很多是php没有直接提供的,但它们又被普遍使用,因此drupal自带了几个数组操作的类,在本系列之前写过一篇以数组合并为主题的分享,本篇将介绍其他几种类型的数组操作,它们是:
多维嵌套数组处理:Drupal\Component\Utility\ NestedArray
递归计算数组差集:Drupal\Component\Utilit\ DiffArray
对数组进行排序:Drupal\Component\Utility\SortArray
类文件位于:\core\lib\Drupal\Component\Utility中,值得说明的是在这个文件夹中的类都是web开发常用的实用工具类,开发者可以轻易用于其他项目中,节约很多时间。
首先说说多维嵌套数组处理类:Drupal\Component\Utility\ NestedArray
类方法全是以静态方法提供,方便使用,先来看一个需求:
在某对象中以$this->get(“a.b.c”)来获取$this->data[“a”][“b”][“c”]怎么实现?在配置系统中就用到了该特性,关键注意点是如a.b.c这样的路径深度是可变的,也就是说数组可以是多层嵌套的,这就是NestedArray::getValue方法的作用:
源文件如下:
public static function &getValue(array &$array, array $parents, &$key_exists = NULL) {
$ref = &$array;
foreach ($parents as $parent) {
if (is_array($ref) && array_key_exists($parent, $ref)) {
$ref = &$ref[$parent];
}
else {
$key_exists = FALSE;
$null = NULL;
return $null;
}
}
$key_exists = TRUE;
return $ref;
}
第一个参数是要查找的数组
可以将前文提到的a.b.c以点为分隔符拆分为数组作为该方法的第二个参数就可以得到它的值了。注意如果该参数为空数组将返回整个原数组。
第三个参数什么意思呢?该方法当值不存在时将返回NULL,但我们怎么知道是值不存在还是存在但值为NULL呢?这就是第三个参数的作用,当值存在时它会被设置为true,它以引用方式传递,不需要关注该区别可不传递。如果第二个参数为空数组,该参数也会被设置为true
有get就有set,对应的方法为:
public static function setVa