我想将现有数组排序为4维数组: 我拥有的“列表”数组:
1 => "text1"
10 => "text10"
11 => "text11"
101 => "text101"
1011 => "text1011"
10123 => "text10123"
2 => "text2"
20 => "text20"
201 => "text201"
2011 => "text2011"
20111 => "text20111"
我想要的数组是一个按所有数字排序的数据(4维),我的意思是我在$ chapter [1]的末尾不会包含另一个包含10123 =>“ text10123”的数组(此代码将与该代码位于同一数组中:1011 =>“ text1011” 这是我想要的数组的一个例子
$chapter[1] = array(
1 => "text1", array(
10 => "text10", 11 => "text11", array(
101 => "text101", array(
1011 => "text1011", 10123 => "text10123" )
)
)
);
答案 0 :(得分:0)
我想您可以使用for-loop
并将每个数字分解为数字(用str-split),然后添加数组。
考虑以下示例:
$arr = array(1, 11, 111, 113, 2, 21, 211, 213);
$chapter = array(); // this will be your result array
foreach($arr as $e) {
$digits = str_split($e);
$current = &$chapter;
foreach($digits as $d) {
if (!isset($current[$d]))
$current[$d] = array();
$current = &$current[$d];
}
}
注意,我使用&
将新数组分配给原始结果之一。
我知道您的数组缺少键,不必进行排序,但是我想您可以克服它(之前对数组进行过滤和排序)
已编辑
问题更改后,这是示例代码:(当键DATA
用于所需的文本,而键CHILDREN
用于下一元素时)
$arr = array(1 => "text1", 10 => "text10", 11 => "text11", 101 => "text101", 1011 => "text1011", 10123 => "text10123", 2 => "text2", 20 => "text20", 201 => "text201", 2011 => "text2011", 20111 => "text20111");
$chapter = array();
foreach($arr as $key => $val) {
$digits = str_split(substr($key, 0, 4)); // if 4 digits is the max depth
$current = &$chapter;
foreach($digits as $d) {
if (!isset($current["CHILDREN"][$d]))
$current["CHILDREN"][$d] = array();
$current = &$current["CHILDREN"][$d];
}
$current["DATA"] = $val;
}