在多维数组中组合字符串并保持键 - PHP

时间:2016-07-15 19:48:27

标签: php arrays multidimensional-array

我有这个数组:

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和一个循环。我无法得到它。

4 个答案:

答案 0 :(得分:0)

我不知道你的数组结构是什么,但简单的解决方案是:

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

或更简单:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

谢谢你的帮助!你是对的。这是内爆。

答案是:

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

答案 3 :(得分: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)