PHP以递归方式从多维数组中提取唯一元素

时间:2012-06-26 18:52:49

标签: php multidimensional-array

我有一个多维数组,每个数组都有一个特定的索引 更具体地说,我有一个唯一的ip作为索引和条目的值。

我想从每个数组中递归地提取1个值,而不是从同一个IP中提取2个值,并将这些值显示为批处理。我必须展示整套装置。

为了更清楚一点,我必须根据IP唯一性从整个集合中提取值,每个批处理必须包含5个值,并且我必须显示列表中的每个值。 IP的数量永远不是已知值。

例如,如果我有这个数组:

Array
  (
    [ip] => Array
    (
        [0] => entry01


        [1] => entery02


        [2] => entery03


        [3] => entery04

    )

 [ip] => Array
     (
        [0] => entery05


     )

 [ip] => Array
     (
        [0] => entery06


     )
 )

我的结局应该是这样的:

  entery01, entery05, entery06

现在请注意,我们在第一个数组中仍然有值entery02-04,这意味着一旦提取完成,我必须得到它们。

4 个答案:

答案 0 :(得分:0)

无法使用关联数组 - 您只能拥有一个ip键。

修改:假设ip是占位符,请执行以下操作:使用in_array()并添加到结果数组(如果它未评估为true

<?php

$begin = array(
    0 => array( 'entry01', 'entry02', 'entry03' ),
    1 => array( 'entry01', 'entry04' ),
    2 => array( 'entry02', 'entry07' )
);

$results = array();
foreach ( $begin as $k1 => $subarr ) {
    $count = 0;
    foreach ( $subarr as $k2 => $entry ) {
        if ( ! in_array( $entry, $results ) && $count < 1 ) {
            $results[] = $entry;
            $count++;
        }
    }
}
var_dump( $results );

?>

$ php unique_items.php 
array(3) {
  [0]=>
  string(7) "entry01"
  [1]=>
  string(7) "entry04"
  [2]=>
  string(7) "entry02"
}

答案 1 :(得分:0)

$events = array();
foreach($data_array as $ip=>$evnt_array){
  foreach($evnt_array as $event){
    if(!in_array($event,$events)){
       $events[] = $event
    }
  }
}

每条评论

$events = array();
foreach($data_array as $ip=>$evnt_array){
  foreach($evnt_array as $event){
    if(!in_array($event,$events)){
      $events[] = $event
      break;
    }else{
      continue;
    }
  }
 }

在这个例子中,我们只取第一个元素,如果它是唯一的,然后突破内部循环。如果第一个元素已经编入索引,请继续执行下一个元素并重复检查。

答案 2 :(得分:-1)

我认为这样的事情应该有效

$myInputArray = // your array up there
$myOutputArray = array();
foreach($myInputArray as $ip) {
  foreach($ip as $value) {
    if(!in_array($value,$myOutputArray)){
      $myOutputArray[] = $value;
    }
    break;
  }
}
编辑:对不起,我错过了这一行:

  

我想从每个数组中递归地提取1个值,而不是从同一个IP中提取2个值,并将这些值显示为批处理。我必须展示整套装置。

回答更新

答案 3 :(得分:-1)

我认为你正在寻找一个foreach循环。这只是抓住了第一个。

foreach ($arrayName as $ip){
  echo $ip[0];
}

我错过了一些问题。上述部分不再是我心中的有效回应。我认为一个关联数组的密钥是ip,而值是ip会起作用。检查数组中是否有ip的密钥(如果它不存在)如果存在则添加它从数组中删除该密钥。如果数组的长度是5,那么你可以停止。