2013-04-25 73 views
0

我從我的查詢中獲得了期望的結果,現在我無法在 中找出如何將數據操作爲可用的數據。PHP在特定數組列中有多少個唯一值

最終目標是谷歌圖表使用的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_na我並追加到 所需輸出的第一行...我只想獨特。

另外一個組件可能不具有特定月份的任何意見(它可能沒有甚至 當月存在的),所以我可能從二月最新組件,並且不被添加,直到後來,但其他部件 包括在計數中...即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函數?

有沒有更好的方法來做到這一點?

+0

將在array_unique()函數幫助你獲得部件的唯一名稱? – Floris 2013-04-25 19:54:51

+0

array_unique()...試過了,太多的節點是唯一的,因爲月/年/計數值 – ppetree 2013-04-25 20:08:56

回答

0

是否有PHP的這個功能?

編號array_unique()是最接近的,但不處理二維數組。

有沒有更好的方法來做到這一點?

不幸的是,PHP(目前)不具有摘去鍵到一個數組,所以你可以再使用array_unique()陣列功能。因此,缺少一些微觀優化或使用數組函數進行重構,您所擁有的通常就是您必須要做的。

但是,你必須錯字:

$names[$key] = ++$count; 
+0

看到我的答案,我可以找出最接近的東西「pluck」函數。還沒有弄清楚如何將elect的名字作爲第二個參數傳遞,所以對這個例子進行了硬編碼 - 但它起作用。 – Floris 2013-04-26 10:19:23

1

我知道你是否有一些運氣array_map它允許你提取與特定鍵的所有元素。示例

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

不確定的語法與在iPhone上鍵入此內容完全相同,並且不知道是否更高效。但值得一試?

+0

+但是,我認爲這相當於使用數組函數*重構的原始代碼*。簡單的答案是PHP目前無法完成單個功能所要求的功能。 – 2013-04-26 12:11:57

+0

@jasonmccreary - 我不反對。雖然我認爲這是'array_map'的一個很酷的用法。我懷疑沒有可察覺的性能差異。 – Floris 2013-04-26 12:27:36

+0

對我來說,這是同樣的問題...用相同的關鍵字提取所有元素,並獲得所有元素。 – ppetree 2013-04-26 14:34:37

1

你應該能夠做到array_column,然後陣列獨一無二的,所以試試這個:

array_unique(array_column($cmpnt, 'cmpnt_name')); 
+0

誰downvoted,你能解釋爲什麼嗎?我發現這對我來說工作得很好,並且比IMHO下的其他答案更簡單.. – progwhiz 2014-12-22 10:52:58

+0

請注意'array_column'是PHP 5.5中的新增功能。 – Shai 2015-10-06 14:44:53

相關問題