2012-01-04 12 views
5

Tôi đã tìm kiếm hi và thấp cho một giải pháp. Tôi có một mảng đa chiều động tôi cần phải chia nhỏ và mã hóa url. Số lượng mục sẽ thay đổi nhưng chúng sẽ luôn có cùng khóa.Làm thế nào để urlencode một mảng đa chiều?

$formFields = Array ( 
[0] => Array ([form_name] => productID [form_value] => 13) 
[1] => Array ([form_name] => campaign [form_value] => [email protected]) 
[2] => Array ([form_name] => redirect [form_value] => http://example.com)) 

Mỗi mảng có Tên biểu mẫu và Giá trị biểu mẫu.

Đây là những gì tôi đang cố gắng để có được:

$desired_results = 
productID => 13 
campaign => [email protected] 
redirect => http://example.com 

Mỗi lần tôi cố gắng và chia chúng tôi kết thúc với: FORM_NAME => productID hoặc một cái gì đó như thế.

Tôi đang cố gắng để lấy kết quả và sau đó URLEncode họ:

productID=13&campaign=email&gmail.com&redirect=http://example.com& 
+0

tại sao không chỉ đơn giản là '$ fromFields = array ('productID' => 13, ...)'? –

+0

Tập lệnh sẽ không biết khóa là gì. Chúng sẽ thay đổi tùy thuộc vào trang nào đang gọi nó. Đây là siêu dữ liệu lưu trữ trong một wordpress và tùy thuộc vào bài viết được gọi là kịch bản .. Các phím $ sẽ thay đổi. – krazymatty

+0

Có thể ai đó có đề xuất về cách tốt hơn để lưu trữ mảng động để gọi nó dễ dàng hơn. – krazymatty

Trả lời

3

Điều này sẽ trả về các giá trị bất kể tên của khóa.

$result = array(); 

foreach ($formFields as $key => $value) 
{ 
    $tmp = array_values($value); 
    $result[$tmp[0]] = $tmp[1]; 
} 
print(http_build_query($result)); 

Các foreach vòng qua các mảng chính, lưu trữ các subarrrays trong biến $value. Hàm array_values trả về tất cả các giá trị từ mỗi mảng dưới dạng mảng số mới. Giá trị của [form_name] sẽ được lưu trữ trong chỉ mục đầu tiên, [form_value] trong giá trị thứ hai.

Chức năng được xây dựng trong http_build_query sẽ trả lại chuỗi được mã hóa url.

+0

WOW Điều đó đã hiệu quả! Tôi chưa hiểu nhưng nó hoạt động! Cám ơn rất nhiều. – krazymatty

16

bạn có thể sử dụng serialize và unserialize:

$str = urlencode(serialize($formFields)); 

và sau đó để giải mã nó:

$formFields = unserialize(urldecode($str)); 
+3

Nếu nó chỉ là một mảng, 'json_encode()'/'json_decode()' là thích hợp hơn với 'serialize()' vì nó có cấu trúc đơn giản hơn và dẫn đến một chuỗi ngắn hơn. Nó cũng di động hơn (giống như 'JS' và như vậy) – konsolenfreddy

-1

chức năng tùy chỉnh cho các khóa và giá trị mảng mã hóa url.

function urlencode_array($array){ 
    $out_array = array(); 
    foreach($array as $key => $value){ 
    $out_array[urlencode($key)] = urlencode($value); 
    } 
return $out_array; 
} 
-1
<!-- Encode entire array here --> 

function encode(&$item, $key) { 
$item = rawurlencode($item); 
} 

array_walk_recursive($input_array, 'encode'); 
+0

Nó trả về mảng. – srokatonie