2015-04-23 96 views
1

我有陣象下面這樣:爆不同膠多維數組在PHP

Array 
(
    [22] => Array 
     (
      [0] => 60 
      [29] => Array 
       (
        [0] => 6 
       ) 

      [30] => Array 
       (
        [0] => 5 
        [1] => 8 
       ) 

      [31] => Array 
       (
        [0] => 7 
        [1] => 9 
        [2] => 14 
        [3] => 26 
       ) 

     ) 

    [23] => 12 
    [35] =>10 
    [42] =>22 
) 

現在我想破滅陣列像

60[6][5||8][7||9||14||26]|12|10|22 

我曾嘗試下面的代碼:

$arr = array_map(function($el){ return $el['tag_id']; }, $arr); 
$str = implode(',', $arr); 

但它不會因需要的膠水而崩潰

我該怎麼做?

+0

我可以不知道這種模式。你有時會抓住鑰匙,有時會搶到價值...... – Raptor

+0

對不起,更新後的圖案 –

+0

你的圖案還是錯的。 – niyou

回答

2

您可以使用此代碼

<?php 
$a= Array(
    22 => Array(
      0 => 60, 
      29 => Array(
        0 => 6 
       ), 

      30 => Array 
       (
        0 => 5, 
        1 => 8 
       ), 

      31 => Array 
       (
        0 => 7, 
        1 => 9, 
        2 => 14, 
        3 => 26 
       ), 

     ), 

    23 => 12, 
    35 =>10, 
    42 =>22, 
); 
$string=''; 
foreach($a as $arr){ 
    if(is_array($arr)){ 
     foreach($arr as $array){ 
      if(is_array($array)){ 
       $string .= '['.implode("||",$array).']'; 
      }else{ 
       if($string!==''){ $string .= '|';} 
       $string .= $array; 
      } 
     } 
    }else{ 
     if($string!==''){ $string .= '|';} 
     $string .= $arr; 
    } 

} 
echo $string;die; 

?> 

停止放時便會

60 [6] [5 || 8] [7 || || 9 14 26 ||] | 12 | 10 | 22

+0

@ bhumi-shah我的這個邏輯對你的問題是完美的 –

0

可以使用foreachimplode實現自己的圖案:

<?php 
header('Content-Type: text/plain'); 
$arr = array(); 
$arr22 = array(); 
$arr22[0] = 60; 
$arr22[29] = array(6); 
$arr22[30] = array(5,8); 
$arr22[31] = array(7,9,14,26); 
$arr[22] = $arr22; 
$arr[23] = 12; 
$arr[35] = 10; 
$arr[42] = 22; 

$output = ''; 
foreach($arr as $entry) { 
    if(!is_array($entry)) { 
     $output .= $entry; 
    } else { 
     // array 
     foreach($entry as $inner) { 
      if(is_array($inner)) { 
       $output .= '[' . implode('||', $inner) . ']'; 
      } else { 
       $output .= $inner; 
      } 
     } 
    } 
    $output .= '|'; 
} 
echo substr($output, 0, strlen($output) - 1); 
?> 

,其輸出:

60 [6] [5 || 8] [7 || || 9 14 | | 26] | 12 | 10 | 22

2

希望的結果,而不foreach

$array = [ 
    22 => [ 
     0 => 60, 
     29 => [ 
      0 => 6 
     ], 
     30 => [ 
      0 => 5, 
      1 => 8 
     ], 
     31 => [ 
      0 => 7, 
      1 => 9, 
      2 => 14, 
      3 => 26 
     ] 
    ], 
    23 => 12, 
    35 => 10, 
    42 => 22 
]; 

$result = implode('|', array_map(function($item) 
     { 
     return is_array($item) // convert sub array into string 
       ? implode('', array_map(function($inner_item) 
        { 
        return is_array($inner_item) // convert inner array into string 
          ? '[' . implode('||', $inner_item) . ']' 
          : $inner_item; 
        }, $item)) 
       : $item; 
     }, $array)); 
var_dump($result); 

因此,我們有3種類型的分隔符:'|' - 第一級,''(空) - 第二個層次,'||' - 第三級。

0

這應該爲你工作:

在這裏,你想要的,這邏輯是建立在遞歸調用,因此這會爲多維數組的任何級別的工作膠水配置:

<?php 
$arrVal = array (
    '22' => array(
     '0' => 60, 
     '29' => array(
      '0' => 6 
     ), 
     '30' => array (
      '0' => 5, 
      '1' => 8 
     ), 
     '31' => array (
      '0' => 7, 
      '1' => 9, 
      '2' => 14, 
      '3' => 26 
     ) 
    ), 
    '23' => 12, 
    '35' => 10, 
    '42' => 22 
); 
//60[6][5||8][7||9||14||26]|12|10|22 
$constructedValue = ""; 
$glue = "||"; 
echo $constructedValue = implodeMultiArr($arrVal,$glue); 
function implodeMultiArr($arrVal,$glue) { 
    $i = 0; 
    $constructedValue = ""; 
    foreach ($arrVal as $k=>$v) { 
     if (is_array($v)) { 
      $constructedValue .= !empty($constructedValue) ? "[".implodeMultiArr($v,$glue)."]" : implodeMultiArr($v,$glue)."]" ; 
     } else { 
      $constructedValue .= !empty($constructedValue) ? $glue.$v : $v ; 
     } 
     $i++; 
    } 
    return $constructedValue; 
}