在级别2上按值删除级别1数组

时间:2014-01-07 09:08:07

标签: php mysql arrays

如何通过在数组(Level 2)中搜索重复值来删除一行数组(Level 1)?

$array = array(
   0 => array('name' => 'haha1', 'dateline' => '2014-07-1 00:00:00', 'toid' => '1')
   1 => array('name' => 'haha2', 'dateline' => '2014-07-1 00:00:00', 'toid' => '2')
   2 => array('name' => 'haha3', 'dateline' => '2014-07-1 00:00:00', 'toid' => '1')
   3 => array('name' => 'haha4', 'dateline' => '2014-07-1 00:00:00', 'toid' => '3')
);

删除行$ array [2]由于$ array [2] ['toid']重复到$ array [0] ['toid']。 保留$ array [0]但删除$ array [2]

我在foreach中试过foreach,如下所示,但我认为我以错误的方式使用它们:

$container = array(); //The Container for none duplicated array

foreach($array as $key => $var){
  foreach($container as $k => $v){
     if(!array_search($var['toid'], $v['toid'])){
        $container[] = $var;
     }
  }
}

另一个问题:记录是从MySQL数据库中获取的,除了数组方式,是否可以在MySQL中获取没有重复的行?

是否可以使用MySQL查询来实现,哪种解决方案更快/更喜欢?

SQL的结构如下:

'id' => auto_increment, int(11)
'name' => varchar(255)
'dateline' => datetime,
'toid' => int(11)

如何通过'dateline'获取所有无重复的'toid'字段行顺序?

1 个答案:

答案 0 :(得分:0)

尝试

$data=array();
for($i=0;$i<sizeof($array);$i++){
        $tmp=array();
    $data =  array_unique(array_merge($data,$array[$i]));
}

现在删除了重复的条目。 现在创建一个多维数组

$output=array();
$tmp = &$output;
foreach($data as &$val){
  if(strpos($val,'level') !==false ){
     if (!is_array($tmp)){
          $tmp = array();
      }
      $tmp = &$tmp[$val];

  }else{
    $tmp[] = $val;
  }
}

echo "<pre>";
print_r($output);
exit();