많은 검색을 수행했지만 좋은 해결책을 찾을 수 없습니다.PHP 다차원 배열 키로 중복 제거
I는 이와 같이 동적으로 생성 된 배열을 가지고
I 각 레벨에서 모든 중복 값을 제거하면된다 싶은Array (
[0] => Array ([0] => a)
[1] => Array ([a] => Array ([0] => aa))
[2] => Array ([a] => Array ([aa] => Array ([0] => aaa)))
[3] => Array ([a] => Array ([aa] => Array ([0] => aab)))
[4] => Array ([a] => Array ([ab] => Array ([0] => aba)))
[5] => Array ([0] => b)
[6] => Array ([b] => Array ([0] => bb)))
(어레이는 크거나 작은 치수가 될 수있다)과 유사한 결과를 생성 할 :
Array (
[0] => Array ([a] => Array ([aa] => Array ([0] => aaa
[1] => aab)
[ab] => Array ([0] => aba)
)
)
[1] => Array ([b] => Array ([0] => bb)
)
)
나는 그것을 다루는 여러 재귀 함수 (아래 예) 만들기 시도했지만 아직 원하는 효과를 얻는 방법을 알아낼 수 없었다, 고장에 따른 그들 모두를 삭제했다.
function deduplicateArray(&$varTemp) }
if (is_array($varTemp)) {
foreach($varTemp as $key => &$value) {
if (is_array($value)) {
// do stuff.
deduplicateArray($value);
} else {
// do stuff.
}
}
} else {
// do stuff.
}
}
올바른 방향으로도 도움이됩니다. 감사합니다.
편집 :
어레이가 구분 %에 2 층을 이용하여 적절히 명명 된 파일로부터 생성되고,이 코드에 의해 생성된다.
function generateStructure(&$arrStructure, $strContent, $strBaseURL, $strPageURL) { // Generate Content Structure Code.
if ($arrStructure === array(NULL)) {
$arrStructure = array(''); // Define Final Array.
if ($dirTemp = opendir($strContent)) {
while (false !== ($strFile = readdir($dirTemp))) {
if ($strFile != '.' && $strFile != '..') {
if (is_file($strContent.$strFile) && substr_count($strFile, '.php') > 0) { // Make sure is file and is php.
if (isset($arrFiles)) {
array_push($arrFiles, strtok($strFile, '.php'));
} else {
$arrFiles = array(strtok($strFile, '.php'));
}
}
}
}
closedir($dirTemp);
} else {
errorCode(403);
}
sort($arrFiles); // Put in Alphabetical Order
$intTemp = 0;
for ($i = 0; $i < count($arrFiles); $i++) {
$arrTempSplit = explode('%2F',$arrFiles[$i]); // Create an Array of Strings from FileName String by Delimiter.
$ii = count($arrTempSplit) - 1; // Create integer that is equal to the potential Multi-Dimensional Array's Columns.
//if ($ii > $intTemp) {
// $intTemp = $ii; // Get highest elementt for The Final Array.
//}
$arrTemp=array($arrTempSplit[$ii]); // Turn current Element into Array.
$ii--;
for($ii; $ii >= 0 ; $ii--) { // Loop through the Multi-Dimentional Array from Right to Left.
$arrTemp2 = array($arrTempSplit[$ii] => $arrTemp);
unset($arrTemp);
$arrTemp = &$arrTemp2;
}
// Deduplicate Multi-Dimensional Array.
//if ($i > 0 && is_array($arrStructure[$i])) {
// $arrStructure[$i] = array_merge_recursive($arrTemp, $arrStructure[$i-1]);
//} else {
$arrStructure[$i] = $arrTemp;
//}
}
//$arrStructure = array_unique($arrStructure);
deduplicateArray($arrStructure);
print_r($arrStructure);
}
}
그 확인 최상위 어레이 [0] [1] [2] 등 단지 직접 다음 단계 수로 존재 여부에 대한.
또한 % 2Faa이 AA가 % 2FA BB %의 2Fb ㄴ %의 2Faa의 %가 2FA
가나는 단지 그들이 주문한 테이블
생성되는 파일 이름에이 시나리오를 가질 수 있습니다 순서대로 디버깅하기 쉽도록 만듭니다.어윈 - haasnoot
@ 의도 된 동작은
Array (
[0] => Array ([a] => Array ([aa] => Array ([0] => aab)
[ab] => Array ([0] => aba)
)
[b] => Array ([0] => abb)
)
[1] => Array ([b] => Array ([0] => bba))
)
그것을 생각하는 방법이 가장 왼쪽 값에서 문자열이 부모와 자식 왼쪽에서 오른쪽입니다 것입니다.
다른 세대와 이름이 같은 부모가 없을 수 있으며 해당 세대의 부모에게는 이름을 공유하는 자식이 없을 수 있습니다.
그러나 아이들은 부모와 같은 이름 일 수도 있고 다른 부모에게 속한 다른 아이들 일 수도 있습니다.
모든 부모가 자녀를 가질 수있는 것은 아닙니다.
모든 어린이가 다음 세대의 부모가 될 수있는 것은 아닙니다.
부모 및 자녀의 세대 수에는 제한이 없습니다.
당신은 최고 수준의 배열에 array_unique를 실행하면 어떻게됩니까은 : http://php.net/manual/en/function.array-unique.php –
인가 가지 사이에 반복되는 열쇠가있을 위험이 있습니까? 예를 들어, 핵심 배열'$ array [6] [ 'b'] [ 'aa']'가있을 수 있습니까? – DaveRandom
@MatthewRiches Array ([0] => Array ([0] => a)) –