2012-04-27 56 views
37

Có cách nào tham chiếu một khóa mảng từ bên trong mảng không? Điều này có thể làm cho ý nghĩa hơn trong định dạng mã:PHP: Mảng tham chiếu

$array=array(
    "Key1"=>array(
    "Value1", 
    "Value2" 
), 
    "Key2"=>&$this['Key1'] 
); 

Những gì tôi muốn là cho $array['Key2'] để sản xuất các giống như $array['Key1']. Tôi có thể thêm $array['Key2']=&$array['Key1']; sau khi mảng được tạo, nhưng muốn giữ tất cả trong một khối mã nếu có thể.

Tôi đã kiểm tra tài liệu về tham chiếu, cũng như một số đề xuất câu hỏi tương tự tại đây và tìm kiếm "tham chiếu mảng php".

+6

Không, bạn không thể. Trong khi tạo mảng, không có điểm tham chiếu nào có thể. Vì vậy, bạn phải thêm tham chiếu sau đó. – mario

+1

+1 cho một câu hỏi thú vị :-) –

+1

Không có cách nào để làm điều đó trong một câu lệnh duy nhất, trừ khi bạn tham khảo một cái gì đó đã tồn tại. Vì vậy, bạn có thể tạo '$ ref = array (" Value1 "," Value2 ");' và sau đó làm '$ array = array ('Key1' => & $ ref, 'Key2' => &$ref);' và 'unset ($ ref), 'sau đó - nhưng không có điểm, bạn chỉ cần làm điều bạn đề xuất và tạo tham chiếu sau đó – DaveRandom

Trả lời

27

Câu trả lời cho điều này, khi nó quay ra, là có. Tuy nhiên, nó không phải là một cú pháp gọn gàng vì nó sử dụng một loại câu lệnh con, và để lại phạm vi hiện tại được rải rác với một biến tham chiếu bổ sung.

Xét đoạn mã sau:

<?php 

    $array = array(

    // Creates Key1 and assigns the value to it 
    // A copy of the value is also placed in $ref 
    // At this stage, it's not a reference 
    "Key1"=>($ref = array(
     "Value1", 
     "Value2" 
    )), 

    // Now Key2 is a reference to $ref, but not to Key1 
    "Key2"=>&$ref, 

    // Now everything is referenced together 
    "Key1"=>&$ref 

); 

Tôi rất ngạc nhiên rằng đây làm việc không có lỗi, nhưng nó - here's the proof. Tất nhiên, bạn sẽ không làm điều này, nhưng bạn có thể ...

+1

+1 Điều này hoạt động bởi vì khi bạn khai báo cùng một khóa hai lần trong một mảng, nó sẽ ghi đè lên khóa thứ nhất. :-) –

+1

Thực ra đây rõ ràng là trường hợp, tôi đã tự hỏi liệu nó có nên phàn nàn vì nó có vẻ là một điều kỳ lạ để làm và tôi chưa bao giờ thực sự thử nó trước đây. Rõ ràng là một trong những phím gán lại khá phổ biến trong một mảng riêng lẻ, nhưng hiếm khi có trong tuyên bố khai báo! – DaveRandom

+0

@Starx: Xóa nhận xét và khoảng trắng. Đây chỉ là một tuyên bố. –

0

Không thể đặt trong một khối, vì bạn chưa khởi tạo biến. Tương tự với các biến lớp. Để làm điều đó, bạn sẽ cần phải tạo bất kỳ biến nào, và chỉ sử dụng các liên kết của nó, nhưng sử dụng bộ nhớ của nó, do đó, một lần nữa, câu trả lời thực cho câu hỏi của bạn là - không thể :)

Các vấn đề liên quan