2016-07-15 94 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"); 
}