2016-08-15 117 views
1

重复值我有这样仅提取从多维数组在PHP

$non_unique_zip 

      [0]->[0]91390 
       [1]ca 
       [2]1 

      [1]->[0]91391 
       [1]ca 
       [2]1 

      [2]->[0]91392 
       [1]ca 
       [2]1 

      [3]->[0]91390 
       [1]ca 
       [2]2 

      [4]->[0]91394 
       [1]ca 
       [2]2 

阵列所以基本上阵列具有元素,其中ARRA [N] [0]是邮政编码和阵列[N] [2] buyer_id。 现在出来这个,我只想要有多个买家的邮编。所以我想提取的唯一事情就是

[0]->[0]91390 
    [1]ca 

,因为91390是具有买家为1和2 我试图

$result = array(); 
$first = $non_unique_zip[0]; 
for($i=0; $i<count($non_unique_zip); $i++){ 
    $result = array_intersect ($first, $non_unique_zip[$i]); 
    $first = $result; 
} 

唯一的邮政编码,但它只是给出了错误未定义,偏移。 任何帮助将不胜感激。

+0

Garima你真正关心的状态(例如:'ca')或者你只是想要重复的邮政编码? – BeetleJuice

回答

-1

使用跟踪已经被之前遇到的邮政编码的数组。然后当你得到该数组中的一个zip文件时,你知道它是重复的。

$zips = array(); 
$result = array(); 
foreach ($non_unique_zip as $e) { 
    $code = $e[0]; 
    if (isset($zips[$code])) { // duplicate, so add to $result 
     $result[$code] = array($code, $e[1]); 
    } else { 
     $zips[$code] = true; // first time, add it to $zips 
    } 
} 
+0

为什么downvote? – BeetleJuice

-1

使用array_walk像这样:

<?php 

     $non_unique_zip = [ 
      [91390, "ca"], 
      [91391, "ca"], 
      [91392, "ca"], 
      [91390, "ca"], 
      [91394, "ca"], 
     ]; 

     $unique_zip = []; 
     $duplicates = []; 

     array_walk($non_unique_zip, function($data) use(&$unique_zip, &$duplicates){ 
      if(!in_array($data, $unique_zip)){ 
       $unique_zip[] = $data; 
      }else{ 
       $duplicates[] = $data; 
      } 
     }); 


     var_dump($duplicates); 
     // PRODUCES:: 
     array (size=1) 
      0 => 
      array (size=2) 
       0 => int 91390 
       1 => string 'ca' (length=2) 


     var_dump($unique_zip); 
     // PRODUCES:: 
     array (size=4) 
      0 => 
      array (size=2) 
       0 => int 91390 
       1 => string 'ca' (length=2) 
      1 => 
      array (size=2) 
       0 => int 91391 
       1 => string 'ca' (length=2) 
      2 => 
      array (size=2) 
       0 => int 91392 
       1 => string 'ca' (length=2) 
      3 => 
      array (size=2) 
       0 => int 91394 
       1 => string 'ca' (length=2) 
+0

这将返回所有独特的拉链,而不仅仅是多个买家的拉链。 – Barmar

+0

阵列中的买方号码在哪里? – Barmar

0

如果你打电话$records你的出发阵列,这里是一种方式来获得与3行代码的拉链:

//array whose keys are zips, and values are # of occurances 
$zips = array_count_values(array_column($records,0)); 

//filter keeps only zips which occur more than once. 
$zips = array_filter($zips,function($n){return $n>1;}); 

//if you only need the zips, you're done! they are the keys 
$zips = array_keys($zips); 

Live demo