我现在无法集中精力,我的思维一直在用我的解决方案来解决这个问题。
我尝试了很多选择,但他们一直没有工作......叹气。
说我有一个字符串; a.b.c|a.b.d|a.b.e|f|f.g|f.h|i
,我想创建一个新的数组(或对象),如下所示
A > B > C, D, E
F > G, H
I
>
是嵌套数组,,
是父数组中的元素。
这些应该能够继续嵌套多次,例如A > B > C > D > E > F, D
任何指导?我已经尝试将字符串爆炸,然后将这些字符串扩展为数组 - 此数组包含A > B > C, A > B > D, A > B > E
等等,我无法理解如何有效地组合它们。
我开始只是循环遍历数组中的每个元素并检查父项的密钥是否存在,但那是失败的。任何帮助都会受到赞赏,因为我非常疲惫,非常震惊,我可以做这么简单的任务。
答案 0 :(得分:1)
<?php
// read line from standard input
$line = trim(fgets(STDIN));
echo "Line: $line\n"; // debug
// split lines by |
$segments = explode('|', $line);
print_r($segments); // debug
// prepare output array
$md_array = array();
// walk through the segments
foreach($segments as $segment) {
// set pointer to output array
$current = &$md_array;
// split segment by .
$tokens = explode('.', $segment);
print_r($tokens); // debug
foreach($tokens as $token) {
echo "working on $token\n";
// if key is not included in the array, create empty array
if( ! array_key_exists($token, $current) ) {
$current[$token] = array();
}
// pass the pointer to following sub-section
$current = &$current[$token];
}
}
// print out the output
print_r($md_array);
?>
测试脚本
echo "a.b.c|a.b.d|a.b.e|f|f.g|f.h|i" | php test.php
输出
Array
(
[a] => Array
(
[b] => Array
(
[c] => Array
(
)
[d] => Array
(
)
[e] => Array
(
)
)
)
[f] => Array
(
[g] => Array
(
)
[h] => Array
(
)
)
[i] => Array
(
)
)
答案 1 :(得分:0)
想要感谢理查德的解决方案,这让我实现了我的目标。
请参阅以下代码:
public static function permissions($permList) {
$segments = explode('|', $permList);
$md_array = array();
foreach($segments as $segment) {
$current = &$md_array;
$tokens = explode('.', $segment);
$x = 0;
foreach($tokens as $token) {
if(!array_key_exists($token, $current) ) {
if(count($tokens) > $x+1)
$current[$token] = array();
else
$current[] = $token;
}
if(count($tokens) > $x+1)
$current = &$current[$token];
$x++;
}
}
return $md_array;
}
如果我输入a.b.c|a.b.d|a.b.e|f|f.g|f.h|i
,我将返回上面的预期输出。
非常感谢。