【问题标题】:PHP 3D array count unique valuesPHP 3D数组计数唯一值
【发布时间】:2011-12-05 11:28:41
【问题描述】:

我有一个 3D 数组。我需要提取以下内容:

  1. 最深层数组中唯一项的出现次数
  2. 最深层数组中某些项目的共现次数

数组如下所示:

$arr = (
       [0] => array([0] => array([flag][token][value])
                    [1] => array([flag][token][value])
                    )
       )

我尝试使用 for 循环和 if 语句遍历数组,如下所示:

$new_arr1 = ""; // $new_arr1 = array(); //same thing, the later code doesn't work

for ($i=0; $i<count($arr);$i++)
{
    for ($j=0; $j<count($arr[$i]); $j++)
        {

          $value= $arr[$i][$j][value];

          if ($arr[$i][$j][flag] == "noun")
             array_push($new_arr1, $value)

          elseif ($arr[$i][$j][flag] == "verb")
             array_push($new_arr2, $value)
        }
}

switch 语句做了同样的事情,无法让它工作。通过进行这种调节,我希望将满足特定条件的最深层数组中的所有值放入一个数组中,然后对它们执行*array_count_values*。这会给我以下信息:

对于 flag == "noun",value 元素的值存储在 $new_arr1 中,对于 flag == "verb",存储在 $new_arr2 中的 value 元素的值:

$new_arr1 = (
           [dog] => 7
           [cat] => 2
           [horse] => 4
          );

$new_arr2 = (
           [chase] => 2
           [eat] => 5
           [pwn] => 3
          );

这将为我提供使用 *array_uniqe* 函数无法访问的 deepes 级别数组的唯一值计数。

除此之外,我还需要对这些值的同时出现次数进行计数,如下所示:

计算具有特定标志的某个标记出现在具有特定标记的另一个标记之前或之后的次数:

伪代码:

$count=0;
if ( (($arr[$i][$j][flag] == "noun") && ($arr[$i][$j][value] == "dog")) &&
     (($arr[$i][$j+/-1][flag] == "verb") && ($arr[$i][$j+/-1][value] == "chase"))
   )
$count++;

$counter = array($count = array($arr[$i][$j][value]), $arr[$i][$j+/-1][value])

这基本上会给出以下内容:

counter:
array(
      "7" => ([0] => "dog", [1] => "chase")
      "4" => ([0] => "cat", [1] => "eat")
     )

其中“7”和“4”是关联数组的名称,而“dog”和“chase”是存储在另一个数组中的值。

     )

【问题讨论】:

  • 什么是[flag][token][value]?钥匙?价值观?事情的顺序?
  • 这些是关联数组中的关联键

标签: php arrays count statistics


【解决方案1】:

我不确定我是否 100% 遵循您的问题,但这样的事情可能会奏效:

$verb_array = array();
$noun_array = array();
foreach($arr as $index => $data){
    if($data['flag'] == 'noun'){
        if(isset($noun_array[$data['value']])){
            $noun_array[$data['value']]++;
        }
        else{
            $noun_array[$data['value']] = 0;
        }
    }
    else if($data['flag'] == 'verb'){
        if(isset($noun_array[$data['value']])){
            $verb_array[$data['value']]++;
        }
        else{
            $verb_array[$data['value']] = 0;
        }            
    }
}

然后获取出现次数:

$noun_count = count($noun_array);
$verb_count = count($verb_array);

如果您需要特定项目的计数,它将存在于数组中。

【讨论】:

  • 非常感谢! :) 离完成项目又近了一步 :)
  • 6 年后的事后分析:应该为此使用 python。这是一个 NLP 任务,使用 python 和 nltk 很容易解决。
猜你喜欢
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多