아마도 초보 질문 일 수 있지만 이미 문서화를 더 오래 진행하고 있으며 해결책을 찾을 수 없습니다. 나는 각 차원에 대해 내파를 사용할 수 있다고 생각한 다음 그 문자열을 다시 결합하여 str_split
새로운 간단한 배열을 만들 수 있습니다. 그러나 조인 패턴이 값에도 없는지 결코 알 수 없으므로 str_split
원래 값 을 수행 한 후에 는 깨질 수 있습니다.
combine($array1, $array2)
다차원 배열 내부의 배열 과 같은 것이 있습니까?
답변
<?php
$aNonFlat = array(
1,
2,
array(
3,
4,
5,
array(
6,
7
),
8,
9,
),
10,
11
);
$objTmp = (object) array('aFlat' => array());
array_walk_recursive($aNonFlat, create_function('&$v, $k, &$t', '$t->aFlat[] = $v;'), $objTmp);
var_dump($objTmp->aFlat);
/*
array(11) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
[5]=>
int(6)
[6]=>
int(7)
[7]=>
int(8)
[8]=>
int(9)
[9]=>
int(10)
[10]=>
int(11)
}
*/
?>
PHP 5.5.9-1ubuntu4.24 (cli)로 테스트 됨 (빌드 : 2018 년 3 월 16 일 12:32:06)
답변
$array = your array
$result = call_user_func_array('array_merge', $array);
echo "<pre>";
print_r($result);
참조 : http://php.net/manual/en/function.call-user-func-array.php
다음은 또 다른 솔루션입니다 (다차원 배열로 작동).
function array_flatten($array) {
$return = array();
foreach ($array as $key => $value) {
if (is_array($value)){ $return = array_merge($return, array_flatten($value));}
else {$return[$key] = $value;}
}
return $return;
}
$array = Your array
$result = array_flatten($array);
echo "<pre>";
print_r($result);
답변
이것은 한 줄이며 사용하기 매우 쉽습니다.
$result = array();
array_walk_recursive($original_array,function($v) use (&$result){ $result[] = $v; });
익명의 기능 / 폐쇄 내에서 이해하기 매우 쉽습니다. $v
귀하의 $original_array
.
답변
// $array = your multidimensional array
$flat_array = array();
foreach(new RecursiveIteratorIterator(new RecursiveArrayIterator($array)) as $k=>$v){
$flat_array[$k] = $v;
}
답변
특별히 한 수준 이상으로 가지 않는 배열이있는 경우 (일반적인 사용 사례) array_merge
및 표시 연산자를 사용하면됩니다.
<?php
$notFlat = [[1,2],[3,4]];
$flat = array_merge(...$notFlat);
var_dump($flat);
산출:
array(4) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
}
splat 연산자는 배열의 배열을에 대한 인수로 배열 목록으로 효과적으로 변경합니다 array_merge
.
답변
PHP 7에서는 생성기 및 생성기 위임 ( yield from
)을 사용하여 배열을 평면화 할 수 있습니다.
function array_flatten_iterator (array $array) {
foreach ($array as $value) {
if (is_array($value)) {
yield from array_flatten_iterator($value);
} else {
yield $value;
}
}
}
function array_flatten (array $array) {
return iterator_to_array(array_flatten_iterator($array), false);
}
예:
$array = [
1,
2,
[
3,
4,
5,
[
6,
7
],
8,
9,
],
10,
11,
];
var_dump(array_flatten($array));
답변
function flatten_array($array, $preserve_keys = 0, &$out = array()) {
# Flatten a multidimensional array to one dimension, optionally preserving keys.
#
# $array - the array to flatten
# $preserve_keys - 0 (default) to not preserve keys, 1 to preserve string keys only, 2 to preserve all keys
# $out - internal use argument for recursion
foreach($array as $key => $child)
if(is_array($child))
$out = flatten_array($child, $preserve_keys, $out);
elseif($preserve_keys + is_string($key) > 1)
$out[$key] = $child;
else
$out[] = $child;
return $out;
}