2012-02-21 34 views
7

PHP có một chiết xuất chức năng mà sẽ chuyển đổi một mảng như thế này:biến php để mảng - trái ngược với "trích xuất"

$array = array(
'var1' => 1, 
'var2' => 2 
); 

tới:

$var1 = 1; 
$var2 = 2; 

bây giờ, tôi cần phải điều ngược lại, tôi có vài biến:

$var3 = 'test'; 
$test = 'another'; 
$datax = 1; 

mà cần phải có:

$array = array(
'var3' => 'test', 
'test' => 'another', 
'datax' => 1 
); 

Có điều gì giống như thế này trong PHP không?

+1

Nếu đây là phạm vi toàn cầu, bạn đã có nó trong '$ GLOBALS ['test']. $ GLOBALS ['var3'] '[' $ GLOBALS' tham chiếu] (http://us3.php.net/manual/en/reserved.variables.globals.php) –

+3

Nó nói 'nhỏ gọn' ngay trên [trang thủ công cho 'trích xuất'] (http://php.net/extract). Tại sao bạn không tìm thấy nó? – Gordon

+0

Câu trả lời đúng sẽ là "tạo một lớp chứa các thuộc tính var3, test và datax", nhưng không may trong phối cảnh SO sẽ không phải là câu trả lời cho câu hỏi của bạn. – CodeCaster

Trả lời

16

Bạn có thể sử dụng compact() để đạt được điều này.

$var3 = 'test'; 
$test = 'another'; 
$datax = 1; 
$array = compact('var3', 'test', 'datax'); 

tham khảo: http://php.net/manual/en/function.compact.php

+1

oh cảm ơn bạn rất nhiều, tôi sẽ không bao giờ đoán nó – EscoMaji

1

Bạn muốn có được thực sự chắc chắn rằng bạn muốn làm điều này (nó bao gồm những thứ trong phạm vi toàn cầu tự động) nhưng bạn có thể sử dụng

$my_vars = get_defined_vars(); 

Nếu bạn muốn chọn lọc nhiều hơn thế, bạn có thể xem lọc nó như sau:

$my_vars = pack_vars(get_defined_vars()) 

function pack_vars ($defined_vars) 
{ 
    $packed = array(); 
    $ignored = array('dont_use_this', 'ignored_var', 'ignore_this_too'); 

    foreach ($defined_vars AS $key => $value) 
    { 
     if (!in_array($key, $ignored)) 
     { 
      $packed[$key] = $value; 
     } 
    } 
    return $packed; 
} 
+0

Đã có một hàm dựng sẵn có tên 'pack' – ThiefMaster

+0

Damn PHP. Đổi tên :) – Joe

+0

Bên trong hàm get_defined_vars() chỉ trả lại các biến có sẵn trong hàm. Tôi đã sử dụng các khung công tác trước đó, mong đợi một mảng được trả về từ bộ điều khiển. Chức năng này rất hữu ích. Hãy nhớ hủy đặt bất kỳ biến không mong muốn nào trước khi sử dụng - chẳng hạn như tập kết quả cơ sở dữ liệu. –

3

như thế này

$preDefined = (get_defined_vars()); 
$var3 = 'test'; 
$test = 'another'; 
$datax = "1"; 
$newDefined = array_diff(get_defined_vars(), $preDefined); 
print_r($newDefined); 
Các vấn đề liên quan