검색 2차원 PHP 배열의 복사본을 다른 것으로 복사하는 함수가 있습니까?




8 Answers

PHP는 기본적으로 배열을 복사합니다. PHP에서의 참조는 명시 적이어야합니다.

$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a
php arrays copy

PHP 배열의 복사본을 다른 것으로 복사하는 함수가 있습니까?

PHP 배열을 복사하려고 몇 번이나 불타 버렸습니다. 객체 내부에 정의 된 배열을 외부의 전역에 복사하려고합니다.




할 때

$array_x = $array_y;

PHP는 배열을 복사하기 때문에 어떻게 구워 졌는지 확실하지 않습니다. 귀하의 경우,

global $foo;
$foo = $obj->bar;

잘 작동해야합니다.

화상을 입기 위해서, 나는 당신이 참조를 사용하거나 배열 안의 객체가 복제 될 것으로 생각 했어야한다고 생각합니다.




간단하고 모든 사본을 깨는 깊은 사본을 만든다.

$new=unserialize(serialize($old));



PHP> = 5.3을위한 간단하고 청초한

$cloned = array_replace([], $YOUR_ARRAY);

array_replace (또는 array_replace_recursive )입니다. 나에게 가장 깨끗한 방법은 JavaScript와 같은 Object.assign 과 같다.

$original = [ 'foo' => 'bar', 'fiz' => 'baz' ];

$cloned = array_replace([], $original);
$clonedWithReassignment = array_replace([], $original, ['foo' => 'changed']);
$clonedWithNewValues = array_replace([], $original, ['add' => 'new']);

$original['new'] = 'val';

결과는

// original: 
{"foo":"bar","fiz":"baz","new":"val"}
// cloned:   
{"foo":"bar","fiz":"baz"}
// cloned with reassignment:
{"foo":"changed","fiz":"baz"}
// cloned with new values:
{"foo":"bar","fiz":"baz","add":"new"}



나는 오래 전 이걸 알고 있지만 이것은 나를 위해 일했다 ..

$copied_array = array_slice($original_array,0,count($original_array));



이것을 정의하십시오 :

$copy = create_function('$a', 'return $a;');

$ _ARRAY에서 $ _ARRAY2로 복사 :

$_ARRAY2 = array_map($copy, $_ARRAY);



<?php
function arrayCopy( array $array ) {
        $result = array();
        foreach( $array as $key => $val ) {
            if( is_array( $val ) ) {
                $result[$key] = arrayCopy( $val );
            } elseif ( is_object( $val ) ) {
                $result[$key] = clone $val;
            } else {
                $result[$key] = $val;
            }
        }
        return $result;
}
?>



$arr_one_copy = array_combine(array_keys($arr_one), $arr_one);

그냥 하나 더 솔루션을 게시;)




Related