배열을 병합하고 키를 보존하는 방법은 무엇입니까?
두 개의 배열이 있습니다.
$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
나는 그것들을 병합하고 키와 순서를 유지하고 다시 색인화하지 않고 싶다!
이렇게 얻는 방법?
Array
(
[a] => new value
[b] => 2
[c] => 3
[d] => 4
[e] => 5
[f] => 6
[123] => 456
)
array_merge () 시도하지만 키가 유지되지 않습니다.
print_r(array_merge($array1, $array2));
Array
(
[a] => 'new value'
[b] => 2
[c] => 3
[d] => 4
[e] => 5
[f] => 6
[0] => 456
)
통합 연산자를 시도하지만 해당 요소를 덮어 쓰지 않습니다.
print_r($array1 + $array2);
Array
(
[a] => 1 <-- not overwriting
[b] => 2
[c] => 3
[d] => 4
[e] => 5
[f] => 6
[123] => 456
)
나는 장소를 바꾸려고 노력하지만 주문이 잘못되었습니다.
print_r($array2 + $array1);
Array
(
[d] => 4
[e] => 5
[f] => 6
[a] => new value
[123] => 456
[b] => 2
[c] => 3
)
루프를 사용하고 싶지 않습니다. 고성능을위한 방법이 있습니까?
당신은 찾고 있습니다 array_replace()
:
$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
print_r(array_replace($array1, $array2));
PHP 5.3부터 사용 가능합니다.
최신 정보
통합 배열 연산자를 사용할 수도 있습니다 . 이전 버전에서 작동하며 실제로 더 빠를 수도 있습니다.
print_r($array2 + $array1);
@Jack은이를 수행하는 기본 기능을 발견했지만 php 5.3 이상에서만 사용할 수 있으므로 5.3 이전 설치에서이 기능을 에뮬레이트하는 데 작동합니다.
if(!function_exists("array_replace")){
function array_replace(){
$args = func_get_args();
$ret = array_shift($args);
foreach($args as $arg){
foreach($arg as $k=>$v){
$ret[(string)$k] = $v;
}
}
return $ret;
}
}
array_replace_recursive()
또는 array_replace()
당신이 찾고있는 기능입니다
$array1 = array('a' => 1, 'b' => 2, 'c' => 3);
$array2 = array('d' => 4, 'e' => 5, 'f' => 6, 'a' => 'new value', '123' => 456);
var_dump(array_replace_recursive($array1, $array2));
Let suppose we have 3 arrays as below.
$a = array(0=>['label'=>'Monday','is_open'=>1],1=>['label'=>'Tuesday','is_open'=>0]);
$b = array(0=>['open_time'=>'10:00'],1=>['open_time'=>'12:00']);
$c = array(0=>['close_time'=>'18:00'],1=>['close_time'=>'22:00']);
Now, if you want to merge all these array and want a final array that have all array's data under key 0 in 0 and 1 in 1 key as so on.
Then you need to use array_replace_recursive PHP function, as below.
$final_arr = array_replace_recursive($a, $b , $c);
The result of this will be as below.
Array
(
[0] => Array
(
[label] => Monday
[is_open] => 1
[open_time] => 10:00
[close_time] => 18:00
)
[1] => Array
(
[label] => Tuesday
[is_open] => 0
[open_time] => 12:00
[close_time] => 22:00
)
)
Hope the solution above, will best fit your requirement!!
I think this might help if i understand properly:
foreach ($i = 0, $num = count($array2); $i < $num; $i++)
{
$array = array_merge($array1, $arrar2[$i]);
}
ReferenceURL : https://stackoverflow.com/questions/17462354/how-to-merge-array-and-preserve-keys
'development' 카테고리의 다른 글
MySQL InnoDB 삽입이 왜 그렇게 느린가요? (0) | 2021.01.05 |
---|---|
제한을 사용하는 JPA 2 CriteriaQuery (0) | 2021.01.05 |
tkinter로 창 크기가 조정되는 것을 어떻게 막을 수 있습니까? (0) | 2021.01.05 |
일련의 약속을 동기화하는 방법은 무엇입니까? (0) | 2021.01.05 |
npm WARN npm npm은 Node.js v9.1.0을 지원하지 않습니다. (0) | 2021.01.05 |