2016-07-15 95 views
-1

我有此數組:結合多維數組的字符串,並保持關鍵 - PHP

array(1) { 
    ["comments"]=> 
    array(244) { 
    [113]=> 
     array(2) { 
     [0]=> 
     string(40) "2016-07-15 09:27 | From On Track to Done" 
     [1]=> 
     string(40) "2016-07-15 09:56 | From Done to On Track" 
    } 
    } 
} 

我要製作成此陣:

array(1) { 
    ["comments"]=> 
    array(244) { 
    [113]=> 
     array(1) { 
     [0]=> 
     string(80) "2016-07-15 09:27 | From On Track to Done 
     2016-07-15 09:56 | From Done to On Track" 
     } 
    } 
} 

我需要保持的關鍵[113]併合並這些值。 我需要所有的評論只在一個數組中。 在這個例子中,只有兩條評論,但實際上更多。

我試着用array_merge,array_value和一個循環。我無法得到它。

+1

字符串值內爆用'implode'功能 –

+1

安置自己的嘗試與「array_merge和array_value和循環」的代碼。你的代碼會給我們一個起點。 –

+0

蘭德拉,如果下面的答案有用,你可以點擊它的複選標記來接受它(這樣你可以獎勵人們的努力)。 –

回答

0

一個更普遍的算法是:

<?php 
// SAMPLE DATA. 
$arr = array("comments" => array(0 => array("2016-07-15 09:27 | From On Track to Done", 
               "2016-07-15 09:56 | From Done to On Track" 
              ), 
            1 => array("111 | aaa", 
               "222 | bbb", 
               "333 | ccc" 
              ) 
           ), 
       "posts" => array(0 => array("2016-07-13 08:00 | bla bla bla", 
               "2016-07-13 08:30 | more bla bla bla" 
              ), 
            1 => array("444 | xxx", 
               "555 | yyy", 
               "666 | zzz" 
              ) 
           ) 
      ); 
var_dump($arr); // ORIGINAL ARRAY. 
$new = array(); 
foreach ($arr as $key => $category) // "COMMENTS", "POSTS", ... 
{ for ($i = 0; $i < count($category); $i++) // 0, 1, ... 
    { $values = implode($category[ $i ]," "); // MERGE STRINGS. 
    $new[ $key ][ $i ] = array($values);//WE CAN REMOVE "ARRAY" AND LEAVE ONLY "$VALUES". 
    } 
} 
var_dump($new); // NEW ARRAY. 
?> 

結果:

原始數組

array (size=2) 
    'comments' => 
    array (size=2) 
     0 => 
     array (size=2) 
      0 => string '2016-07-15 09:27 | From On Track to Done' (length=40) 
      1 => string '2016-07-15 09:56 | From Done to On Track' (length=40) 
     1 => 
     array (size=3) 
      0 => string '111 | aaa' (length=9) 
      1 => string '222 | bbb' (length=9) 
      2 => string '333 | ccc' (length=9) 
    'posts' => 
    array (size=2) 
     0 => 
     array (size=2) 
      0 => string '2016-07-13 08:00 | bla bla bla' (length=30) 
      1 => string '2016-07-13 08:30 | more bla bla bla' (length=35) 
     1 => 
     array (size=3) 
      0 => string '444 | xxx' (length=9) 
      1 => string '555 | yyy' (length=9) 
      2 => string '666 | zzz' (length=9) 

新陣列

array (size=2) 
    'comments' => 
    array (size=2) 
     0 => 
     array (size=1) 
      0 => string '2016-07-15 09:27 | From On Track to Done 2016-07-15 09:56 | From Done to On Track' (length=81) 
     1 => 
     array (size=1) 
      0 => string '111 | aaa 222 | bbb 333 | ccc' (length=29) 
    'posts' => 
    array (size=2) 
     0 => 
     array (size=1) 
      0 => string '2016-07-13 08:00 | bla bla bla 2016-07-13 08:30 | more bla bla bla' (length=66) 
     1 => 
     array (size=1) 
      0 => string '444 | xxx 555 | yyy 666 | zzz' (length=29) 
0

我不知道什麼是你的陣列結構,但簡單的解決方法是:

$vals = implode("\n", $ar['comments'][113]); 
$ar['comments'][113] = array(); 
$ar['comments'][113][] = $vals; 

或者簡單:

$ar['comments'][113] = array(implode("\n", $ar['comments'][113])); 
+0

謝謝你的幫助!你是對的。我沒有想到內爆。我用你的答案,併成爲一個循環。 –

0

試試這個:

$array['comments'][113] = implode(' ', $array['comments'][113]); 
+0

感謝您的幫助。你是對的。這是內爆。 –

0

謝謝你幫助!你是對的。這是內爆。

答案是這樣的:

foreach ($goals["comments"] as $key => $value) { 
    $goals['comments'][$key][0] = implode($value, "\n"); 
}