0

配列がデータベースからロードされ、次のようになります。

array=>(
  0=>array(
    'id'=>1,
    'user'=>'eric',
    'text'=>'hello'
  ),
  1=>array(
    'id'=>1,
    'user'=>'eric',
     'text'=>'how are you?'
  ),
  2=>array(
    'id'=>2,
    'user'=>'john',
     'text'=>'nice to meet you'
  ),
  ......
)

ご覧のとおり、配列内の唯一の違いは「テキスト」フィールドであるため、次のような冗長性を減らすために別の配列を作成したいと考えています。

array=>(
  0=>array(
   'id'=>1,
   'user'=>'eric',
   'text'=>array(
      0=>'hello',
      1=>'how are you?'
   )
 ),
  1=>array(
   'id'=>2,
   'user'=>'john',
   'text'=>array(
      0=>'nice to meet you',
   )
 ),
 ......
)

私はプログラミングの初心者です。それを理解しようと何時間も費やしましたが、できません。どうすればこれを達成できますか?助けてください。

4

3 に答える 3

1

コード :

<?php
     $newarray = array();

     foreach ($array as $item)
     {
          if (!isset($newarray[$item['id']])) $newarray[$item['id']] = array();

          $newarray[$item['id']][] = $item['text'];
     }
?>

それは次のようなものを作成します:

array (
   1 => array ("hello", "how are you?"),
   2 => array ("a","b"),
   ...
)

// where the array keys (1,2,...) will be the IDs
于 2012-04-07T11:48:34.260 に答える
1

配列キーはid値になります

$new_array = array();
foreach($old_array as $value) {
    $new_array[$value['id']]['text'][] = $value['text'];
}
print_r($new_array);
于 2012-04-07T11:53:20.550 に答える
0

さらにコンパクトにするには、次のようにします。

$new_array = array();
foreach ($old_array as $item) {
    $id = $item['id'];
    if (empty($new_array[$id]) || !in_array($item['text'], $new_array[$id])) {
        $new_array[$id][] = $item['text'];
    }
}

これにより、特定のIDの重複テキストも削減されます。

于 2012-04-07T12:11:31.350 に答える