2010-03-02 45 views
6

Tôi có 2 mảng.Các phần tử mảng tham chiếu PHP

$result = array(); 
$row = array(); 

Phần tử của hàng là tất cả các tham chiếu và liên tục thay đổi. Đối với mỗi lần lặp của $row Tôi muốn sao chép các giá trị của hàng vào mục nhập $result và không phải là tham chiếu.

Tôi đã tìm thấy một vài giải pháp nhưng tất cả đều có vẻ khá khủng khiếp.

$result[] = unserialize(serialize($row)); 
$result[] = array_flip(array_flip($row)); 

Cả hai công việc trên nhưng có vẻ như rất nhiều mã không cần thiết và xấu xí chỉ để sao chép nội dung của một mảng của tài liệu tham khảo theo giá trị, thay vì sao chép các tài liệu tham khảo chính mình.

Có cách nào sạch hơn để thực hiện việc này không? Nếu không phải là cách hiệu quả nhất sẽ là gì?

Cảm ơn.

EDIT: Như đã đề cập bên dưới một cái gì đó như:

function dereference($ref) { 
    $dref = array(); 

    foreach ($ref as $key => $value) { 
     $dref[$key] = $value; 
    } 

    return $dref; 
} 

$result[] = dereference($row); 

Cũng làm việc nhưng dường như đều là xấu xí.

+0

Đây có thể là một bản sao, http://stackoverflow.com/questions/1190026/php-copying-array-elements -by-value-not-by-reference –

+0

Anh ta đang xử lý các đối tượng. Tôi đang xử lý nghiêm ngặt với mảng. – anomareh

+0

Nếu mọi người upvoted câu trả lời của tôi, sau đó họ tin rằng tôi đã đúng. Nếu không phải vậy, thì rất có thể điều đó có nghĩa là bạn đã không làm rõ câu hỏi của bạn lúc đầu. Tôi tìm thấy nó khá thô lỗ về cuối cùng của bạn để nói với mọi người để downvote nỗ lực của tôi để giúp bạn, vì vậy tôi sẽ không cố gắng nữa. – zneak

Trả lời

4

Không chắc chắn tôi hoàn toàn hiểu được câu hỏi, nhưng bạn có thể sử dụng đệ quy không?

function array_copy($source) { 
    $arr = array(); 

    foreach ($source as $element) { 
     if (is_array($element)) { 
      $arr[] = array_copy($element); 
     } else { 
      $arr[] = $element; 
     } 
    } 

    return $arr; 
} 

$result = array(); 
$row = array(
    array('a', 'b', 'c'), 
    array('d', 'e', 'f') 
); 

$result[] = array_copy($row); 

$row[0][1] = 'x'; 

var_dump($result); 
var_dump($row); 
+0

nó xuất hiện như thể chức năng của bạn thực sự sẽ làm việc và những gì tôi đề nghị là không chính xác. – anomareh

2

Mở rộng các chức năng trên thích sau giải quyết một vấn đề tôi đã:

function array_copy($source) { 
    $arr = array(); 

    foreach ($source as $element) { 
     if (is_array($element)) { 
      $arr[] = array_copy($element); 
     } elseif (is_object($element)) { 
      // make an object copy 
      $arr[] = clone $element; 
     } else { 
      $arr[] = $element; 
     } 
    } 
    return $arr; 
} 
Các vấn đề liên quan