从多维数组中取消设置行

时间:2014-01-15 19:12:25

标签: php arrays

我有两个数组: 数组1被命名为$ input,输出:

Array
(
[0] => Array
    (
        [reference_no] => 306334510
        [archive_no] => 20140102900152506
    )

[1] => Array
    (
        [reference_no] => 22936619
        [archive_no] => 20140104900153643
    )

[2] => Array
    (
        [reference_no] => 30211132
        [archive_no] => 20140109001536461
    )

[3] => Array
    (
        [reference_no] => 3890623027301
        [archive_no] => 201401029001949791
    )

)

和第二个名为$ active的数组将输出:

Array
(
[0] => Array
    (
        [archive_no] => 20140102900152506
    )

[1] => Array
    (
        [archive_no] => 20140104900153643
    )

[2] => Array
    (
        [archive_no] => 2014010900133107
    )

[3] => Array
    (
        [archive_no] => 2014010900152506
    )

[4] => Array
    (
        [archive_no] => 2014010900153643
    )

)

首先,我需要检查重复的行,然后通过'archive_no'进行检查。 到目前为止,这工作正常,但现在我需要从$ input数组中删除那些重复的行。 我的未设置似乎不起作用。

到目前为止

代码:

public function RemoveDublicatedRows($input, $active){
    $output = array();
 foreach ($input as $inp) {
  foreach ($active as $act) {
   if ($act['archive_no'] == $inp['archive_no']) {
    $output[] = $act;
     foreach ($output as $out){
      if($inp['archive_no'] == $out['archive_no']){
    $inp = array($inp);
       unset($input[$inp]);
        }
       }
      }
     }
    }
    return $output;
           }

1 个答案:

答案 0 :(得分:0)

这里需要索引而不是数组($ inp):

unset($input[$inp]);

应该是:

if($inp['archive_no'] == $out['archive_no'])
{
   $index = array_search($inp, $input);
   unset($input[$index]);
}

编辑:某些部分在您的代码中没用,这是一个清理过的代码:

public function RemoveDublicatedRows($input, $active)
{
   $output = array();
   foreach ($input as $inp) 
   {
      foreach ($active as $act) 
      {
         if ($inp['archive_no'] == $act['archive_no']) 
         {
            $output[] = $act; 
            // maybe you should consider storing $act['archive_no'] instead ? 
            // It's up to you, depends on what you need...

            $index = array_search($inp, $input);
            unset($input[$index]);
         }
      }
   }

   return $output;
}