0

我有一个多维数组,每个数组都有一个特定的索引,更具体地说,我有一个唯一的 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

4 回答 4

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"
}
于 2012-06-26T18:54:40.113 回答
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;
    }
  }
 }

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

于 2012-06-26T18:57:36.697 回答
-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 个值,并将该束显示为一批。无论如何,我必须展示整套。

答案已更新

于 2012-06-26T18:57:41.543 回答
-1

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

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

我错过了一些问题。以上部分在我看来不再是有效的回应。我认为一个关联数组的键是 ip,值是 ip 会起作用。如果 ip 的键不存在,请检查数组,如果存在则添加它,从数组中删除该键。如果数组的长度为 5 则可以停止。

于 2012-06-26T18:57:51.703 回答