2009-03-26 47 views
8

Tôi có một mảng:Chuyển đổi PHP mảng chuỗi thành một mảng

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 

tôi lưu nó như là một biến:

$fileContents = var_dump($myArray); 

Làm thế nào có thể chuyển đổi các biến lại để sử dụng như một mảng bình thường?

echo $fileContents[0]; //output: value1 
echo $fileContents[1]; //output: value2 
+0

Nếu bạn sử dụng 'print_r' thay vì' var_dump', bạn có thể sử dụng [print_r chức năng ngược lại] (http://www.php.net/ hướng dẫn/en/function.print-r.php # 93529). – machineaddict

Trả lời

19

Tôi nghĩ bạn có thể muốn xem xét serializeunserialize.

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$serialized = serialize($myArray); 
$myNewArray = unserialize($serialized); 
print_r($myNewArray); // Array ([key1] => value1 [key2] => value2) 
+2

Nhưng đó không phải là câu trả lời cho câu hỏi. – marines

+0

@marines: không phải? –

+2

Giải pháp của bạn không bao gồm việc hoàn nguyên đầu ra var_dump() thành mảng (đây là câu hỏi). Nó chỉ là một cách khác để thực hiện tuần tự hóa và unserializing một mảng. – marines

7

Hãy thử sử dụng var_export để tạo cú pháp PHP hợp lệ, viết rằng vào một tập tin và sau đó 'bao gồm' file:

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$fileContents = '<?php $myArray = '.var_export($myArray, true).'; ?>'; 

// ... after writing $fileContents to 'myFile.php' 

include 'myFile.php'; 
echo $myArray['key1']; // Output: value1 
+0

Điều này làm tôi rất hạnh phúc! cảm ơn! –

+0

Mọi người nên quên sử dụng $ myArray làm nguồn cho bất kỳ ví dụ nào ở đây. OP rõ ràng nói rằng ông muốn bắt đầu từ một bãi chứa của nó, không phải là mảng thực tế. Ông có một chuỗi với bãi chứa, không phải là mảng. Anh ta không muốn tạo chuỗi. – sergio

18

serialize có thể là câu trả lời đúng - nhưng tôi thích sử dụng JSON - chỉnh sửa nhân lực của dữ liệu sẽ có thể như vậy ...

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$serialized = json_encode($myArray); 
$myNewArray = json_decode($serialized); 
print_r($myNewArray); // Array ([key1] => value1 [key2] => value2) 
+1

+1, tôi không biết tại sao tôi không nghĩ về nó ban đầu. Đây là những gì cá nhân tôi sử dụng quá. –

+5

+1 cho việc sử dụng JSON. Lưu ý: hàm json_decode() cần tham số thứ 2 là "true" để trả về mảng kết hợp! (hoặc nó sẽ trả về một đối tượng "stdClass") –

2

Làm thế nào về eval? Bạn cũng nên sử dụng var_export với biến trả về là true thay vì var_dump.

$myArray = array('key1'=>'value1', 'key2'=>'value2'); 
$fileContents = var_export($myArray, true); 
eval("\$fileContentsArr = $fileContents;"); 
echo $fileContentsArr['key1']; //output: value1 
echo $fileContentsArr['key2']; //output: value2 
+0

Một ví dụ khác sử dụng $ myArray khi OP nói rằng anh ta muốn sử dụng var_dump() của nó. KHÔNG phải mảng. Trong những gì nó liên quan đến chúng tôi, các mảng có thể đã biến mất và ông chỉ đề cập đến nó cho chúng tôi để biết bãi chứa là gì. – sergio

1
$array = ['10', "[1,2,3]", "[1,['4','5','6'],3]"]; 

function flat($array, &$return) { 
    if (is_array($array)) { 
     array_walk_recursive($array, function($a) use (&$return) { flat($a, $return); }); 
    } else if (is_string($array) && stripos($array, '[') !== false) { 
     $array = explode(',', trim($array, "[]")); 
     flat($array, $return); 
    } else { 
     $return[] = $array; 
    } 
} 

$return = array(); 

flat($array, $return); 

print_r($return); 

OUTPUT

 
Array ([0] => 10 [1] => 1 [2] => 2 [3] => 3 [4] => 1 [5] => '4' [6] => '5' [7] => '6'] [8] => 3) 
Các vấn đề liên quan