【发布时间】:2014-08-29 03:00:43
【问题描述】:
我经常使用多维、关联数组,主要用于配置数据,并在多维数组的使用中引入了“面包屑”。 基本思想:我的类旨在处理一维(平面)面包屑数组,作为多维关联数组中某些值的参考指南。面包屑的每个递增索引基本上是数组内部的一个更深的级别,直到找到最后一个级别和关联键并以递归方式到达。例如:
$myArray = array(
'firstLevel' => array(
'secondLevel' => array(
'myValue' => 42
),
'anotherLevel' => array(
'anotherValue' => 13
)
)
);
$myBreadcrumb = array('firstLevel', 'secondLevel', 'myValue');
$fancyClass = new \someNamespace\fancyArrayProcessingClass($myArray);
$myValue = $fancyClass->getValueForBreadcrumb($myBreadcrumb);
如果有人要求,我也会发布一个处理面包屑的示例,但由于我的目标是自定义数据类型,我发现它离题了。 总是编写“包装器”类、实现的类或其他类型的构造以使数组可通过面包屑导航变得越来越烦人并且开销很大。我想知道是否有一种方法可以将真正的新 DataTypes 引入 PHP,可以像实际 DataTypes 一样处理。我对这个概念的好语法的想法:
$myArray = navigableArray(
'firstLevel' => array(
'secondLevel' => array(
'myValue' => 42
),
'anotherLevel' => array(
'anotherValue' => 13
)
)
);
$myBreadcrumb = array('firstLevel', 'secondLevel', 'myValue');
$myValue = $myArray[$myBreadcrumb];
或者更直观地使用 xpath 样式的字符串:
$myArray = navigableArray(
'firstLevel' => array(
'secondLevel' => array(
'myValue' => 42
),
'anotherLevel' => array(
'anotherValue' => 13
)
)
);
$myValue = $myArray['firstLevel/secondLevel/myValue'];
我知道 PHP 文档中有一句话说“开发人员永远不需要将自己的 DataTypes 引入 PHP”,但是 AFAIK 没有理由给出为什么会这样以及为什么开发人员是 -与几乎所有其他语言不同 - 无法引入完全自定义的数据类型。
编辑: 对于任何好奇的人:我找到了一条替代路线,使用标准 php 类“ArrayAccess”,您可以使您的 PHP 对象表现得像一个实际的数组。著名的“Judy”类包含“ArrayAccess”和“Iterator”,并且完全符合我在这个问题线程中寻找的内容。
【问题讨论】:
标签: php multidimensional-array reference associative-array custom-data-type