[英]Grouping multi-dimensional arrays in PHP
我現在無法集中精力,我的腦子一直在想辦法解決這個問題。
我嘗試了多種選擇,但它們仍然無法正常工作。
說我有這樣的字符串; abc|abd|abe|f|fg|fh|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
然后將這些字符串A > B > C, A > B > D, A > B > E
為數組-該數組包含A > B > C, A > B > D, A > B > E
等,我只是無法理解如何有效地結合它們。
我首先循環遍歷數組中的每個元素,並檢查父鍵是否存在,但這失敗了。 感謝我的幫助,因為我非常累,我可以做這樣一個簡單的任務,實在令人震驚。
<?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
(
)
)
感謝Richard的解決方案,它使我得以實現自己的目標。
請參見下面的代碼:
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;
}
如果我輸入abc|abd|abe|f|fg|fh|i
,則返回上面的預期輸出。
非常感謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.