2011-01-30 9 views
0

このように配列を結合するにはどうすればよいですか?マージ配列(PHP)

ソース:

Array 
(
    [0] => Array 
     (
      [id] => 3 
      [title] => book 
      [tval] => 10000 
     ) 
    [1] => Array 
     (
      [id] => 3 
      [title] => book 
      [tval] => 1700 
     ) 
    [3] => Array 
     (
      [id] => 27 
      [title] => fruit 
      [tval] => 3000 
     ) 

....... 

) 

結果:

Array 
(
    [0] => Array 
     (
      [id] => 3 
      [title] => book 
      [tval] => 10000,1700 
     ) 
    [1] => Array 
     (
      [id] => 27 
      [title] => fruit 
      [tval] => 3000 
     ) 
....... 

) 

、この問題を解決するのに役立ち 感謝してください!悪い英語のため申し訳ありません (

+0

'あるarray_walk()試してみてくださいキーをリセットするarray_merge()である' http://php.net/manual/en/function.array-walk.php –

+0

使用してください'print_r'の代わりに' var_export' – arnaud576875

答えて

3

これは動作するはずです:

$result = array(); 
foreach($array as $elem) { 
    $key = $elem['id']; 
    if (isset($result[$key])) { 
     $result[$key]['tval'] .= ',' . $elem['tval']; 
    } else { 
     $result[$key] = $elem; 
    } 
} 

idによるこの基本的にはグループの要素を、tvals,で区切って)連結

+0

ありがとう!正しく動作しません。 – Vadim

+1

@ Vadimはどのようにして正しく動作しませんか?人々があなたを助けるために休みを取るとき、他人があなたを助けることができるように、より多くの助けを借りて感謝してください。 – mauris

+0

結果として1つの配列が空(カンマ区切り)[tval] – Vadim

0

単にuser576875の方法に多少の構築:。

$a = array (0 => array ('id' => 3, 
          'title' => 'book', 
          'tval' => 10000 
         ), 
      1 => array ('id' => 3, 
          'title' => 'book', 
          'tval' => 1700 
         ), 
      3 => array ('id' => 27, 
          'bcalias' => 'fruit', 
          'tval' => 3000 
         ) 
     ); 

$result = array(); 
foreach ($a as $elem) { 
    $key = $elem['id']; 
    if (isset($result[$key])) { 
     $result[$key]['tval'] .= ',' . $elem['tval']; 
    } else { 
     $result[$key] = $elem; 
    } 
} 
$result = array_merge($result); 

var_dump($result); 

結果:

array 
    0 => 
    array 
     'id' => int 3 
     'title' => string 'book' (length=4) 
     'tval' => string '10000,1700' (length=10) 
    1 => 
    array 
     'id' => int 27 
     'bcalias' => string 'fruit' (length=5) 
     'tval' => int 3000 

唯一の本当の違いは

+0

詳細な回答ありがとうございます! – Vadim

+0

@Vadim - あなたがuser576875にクレジットを渡してくれてうれしいです ...私がしたことは、彼のメソッドが働いたことのデモでした。 –

+0

'array_values()'も使用されていた可能性があります:-) – arnaud576875