2015-03-13 59 views
2

我有以下陣列如何使用值和鍵展開多維數組中的字符串?

[city] => abc 
    [user] => Array 
     (
      [0] => Array 
       (
        [id] => 123 
        [name] => xyz 
        [user_address] => Array 
         (
          [0] => Array 
           (
            [address_line_1] => axy 
            [address_line_2] => 123456 
           ) 

          [1] => Array 
           (
            [address_line_1] => axy 
            [address_line_2] => 123456 
           ) 

         ) 

       ) 

     ) 

我想串像如下: 城市:ABC & user.0.id:123 & user.0.name:xyz & user.0.user_address.0。地址行:AXY

我得到這種類型的結果爲單個陣列的: 陣列是

(
    [id] => 123456 
    [name] => abc 
) 

和邏輯是:

implode('&', array_map(function ($k, $v) {return "$k:$v";}, array_keys($inputsArray), array_values($inputsArray))) 

但我不能夠得到multidioamention陣列單級。

我指follwing聯繫,但沒有得到結果

How to Flatten a Multidimensional Array?

How to "flatten" a multi-dimensional array to simple one in PHP?

請幫我從這。

謝謝。

+0

怎麼樣使用json_encode? – exussum 2015-03-13 11:06:55

+0

'http_build_query'可以處理多維數組。不完全*完全*您想要的格式,但相同。 – deceze 2015-03-13 11:08:51

回答

1
function flatten_with_paths(array $data, array $path = []) { 
    $result = []; 

    foreach ($data as $key => $value) { 
     $currentPath = array_merge($path, [$key]); 
     if (is_array($value)) { 
      $result = array_merge($result, flatten_with_paths($value, $currentPath)); 
     } else { 
      $result[join('.', $currentPath)] = $value; 
     } 
    } 

    return $result; 
} 

$data = [ 
    'city' => 'abc', 
    'user' => [ 
     [ 
      'id' => 123, 
      'name' => 'xyz', 
      'user_address' => [ 
       [ 
        'address_line_1' => 'axy', 
        'address_line_2' => 123456 
       ], 
       [ 
        'address_line_1' => 'axy', 
        'address_line_2' => 123456 
       ] 
      ] 
     ] 
    ] 
]; 

echo http_build_query(flatten_with_paths($data)); 
+0

謝謝,它的工作。 – 2015-03-13 11:55:04