【问题标题】:php array manipulation to reduce redundancyphp数组操作以减少冗余
【发布时间】:2012-04-07 11:45:11
【问题描述】:

从数据库中加载一个数组,如下所示:

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',
   )
 ),
 ......
)

我是编程新手,我花了好几个小时试图弄明白,但我做不到。我怎样才能做到这一点?请帮忙。

【问题讨论】:

  • 一个循环就可以搞定
  • 您要这样做的具体原因是什么?我能想到的大多数原因(速度、效率等)似乎都不是想要这样做的好理由,如果你需要这种结构来做某事,那么从你的数据库中检索它不是更聪明吗?
  • 原因是尽量避免冗余,可以看到id字段是冗余的。但是正如您所建议的那样,从数据库中检索它会很好,但是如何呢?你能告诉我示例代码吗,我正在使用 mysql。
  • 对不起,我把我的问题改了一点,让它有点复杂,正如你所看到的,每组的唯一区别是文本,id和用户是多余的,如何解决这个问题有问题吗?

标签: php arrays redundancy


【解决方案1】:

数组键将是id

$new_array = array();
foreach($old_array as $value) {
    $new_array[$value['id']]['text'][] = $value['text'];
}
print_r($new_array);

【讨论】:

    【解决方案2】:

    代码:

    <?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
    

    【讨论】:

      【解决方案3】:

      为了让它更紧凑,这样怎么样:

      $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 的重复文本。

      【讨论】:

        猜你喜欢
        • 2014-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 2019-06-20
        • 1970-01-01
        • 2017-12-01
        • 2012-05-31
        相关资源
        最近更新 更多