2개의 어레이가 있습니다.
$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 )
루프를 사용하고 싶지 않은데, 하이 퍼포먼스 방법이 있나요?
질문에 대한 답변
다음 항목을 찾고 있습니다.
$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;
}
}
아래와 같이 3개의 어레이가 있다고 가정합니다.
$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']);
이 모든 어레이를 Marge하고 0의 키와 1의 키 아래에 모든 어레이의 데이터가 있는 최종 어레이를 원하는 경우 등입니다.
다음으로 다음과 같이 array_replace_recursive PHP 함수를 사용해야 합니다.
$final_arr = array_replace_recursive($a, $b , $c);
그 결과는 다음과 같습니다.
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
)
)
위의 솔루션이 고객의 요건에 가장 적합하기를 바랍니다.
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));
제대로 이해하면 도움이 될 것 같습니다.
foreach ($i = 0, $num = count($array2); $i < $num; $i++) {
$array = array_merge($array1, $arrar2[$i]); }