0

我从查询中得到了想要的结果,现在我无法弄清楚如何将数据操作成可用的东西。

最终目标是谷歌图表使用的 json 输出,我可以在任何单个组件上执行此操作而不会出现问题。

我需要输出看起来像这样(我不知道月/年之后会有多少组件......它可能是 0 或 10 或 20......):

      ['Month/Year', 'Wiper Blades', 'Mufflers'] [,[...]],
      ['March 2013',  13,      11],
      ['April 2013',  17,      19],
      [...],
      [...]
      ]);

这是我查询后的数组(不能在一段时间内执行此操作(),因为我需要 cmpnt_name 作为所需输出的第一行(上图),这就是我首先构建数组的原因):

Array
(
  [0] => Array
      (
          [vmonth] => February
          [vyear] => 2013
          [cmpnt_count] => 9
          [cmpnt_name] => Wiper blade
      )

  [1] => Array
      (
          [vmonth] => March
          [vyear] => 2013
          [cmpnt_count] => 13
          [cmpnt_name] => Wiper blade
      )

  [2] => Array
      (
          [vmonth] => March
          [vyear] => 2013
          [cmpnt_count] => 11
          [cmpnt_name] => Muffler
      )

  [3] => Array
      (
          [vmonth] => April
          [vyear] => 2013
          [cmpnt_count] => 17
          [cmpnt_name] => Wiper blade
      )

  [4] => Array
      (
          [vmonth] => April
          [vyear] => 2013
          [cmpnt_count] => 19
          [cmpnt_name] => Muffler
      )
)

我无法遍历数组并获取每个 cmpnt_name 并将其附加到所需输出的第一行......我只想要唯一的。

此外,一个组件在给定月份可能没有任何视图(它甚至可能在那个月不存在),所以我可能有从 2 月开始的组件和其他直到稍后才添加但包含在计数中的组件。 . 即消音器是在 3 月添加的。

那么我该如何寻找第一行的唯一组件名称呢?

我刚在想:

function findUniques($cmpnt)
{
  $names = array();
  foreach($cmpnt as $item)
  {
    $key = $item['cmpnt_name'];
    if(array_key_exists($key, $names))
    {
      $names[$key]++;
    }
    else
      $names[$key] = 1;
  }
  return($names);
}

有没有这个的php函数?

有一个更好的方法吗?

4

3 回答 3

2

你应该能够做array_column,然后array unique,所以试试这个:

array_unique(array_column($cmpnt, 'cmpnt_name'));
于 2014-12-10T09:46:08.047 回答
1

我想知道您是否有一些运气array_map可以让您使用特定键提取所有元素。例子

Function compKey($v) {
    Return $v['cmpnt_name'];
}
CKeys = array_map("compKey", $cmpnt);
UniqueComponents = array_unique(CKeys);

不确定在 iPhone 上输入的语法是否完全正确,也不知道是否更有效率。但值得一试吗?

于 2013-04-25T20:58:25.913 回答
0

有没有这个的php函数?

No.array_unique()是最接近的,但不处理维度数组。

有一个更好的方法吗?

不幸的是,PHP(当前)没有将键提取到数组中的数组函数,因此您可以使用array_unique().

因此,缺少一些微优化或使用数组函数进行重构,您所拥有的通常就是您必须做的。

但是,您确实有错字:

$names[$key] = ++$count;
于 2013-04-25T19:56:42.340 回答