2013-02-27 138 views
0

我對PHP和編程非常新,所以我遇到了麻煩。PHP Array數組並獲取元素值

整個情況的目的是從製表符分隔的文件中讀取一列(已經做到了),獲取其中的所有不同項目,分別計數並將它們放入表格中

Column1 [item value - label] ,Column2 [count]。

我有1維數組中的整個列。現在,我想列出所有的物品和旁邊的計數。問題是,我可以有超過10個不同的項目,甚至更多,所以我不能做手工(10個變量和統計每個)是這樣的:

$arr = array("complete","fail","complete","exit","fail","fail","complete"); 
function isComplete($value){ 
    return ($value == "complete") ? true : false; 
} 

$complete = array_filter($array, 'isComplete'); 

<tr> 
    <td>Complete</td> 
    <td><?php echo count($complete)?></td> 
</tr> 

-- > Complete = 3 

我想避免手動創建的每個函數對於每個值,因爲值可能因文件而異。

$ array中的項數可以達到20 + k,所以我需要全部自動化。有人可以幫我弄這個嗎?

+0

數循環? – x4rf41 2013-02-27 13:43:10

回答

2

如何通過數組並將計數放在另一個數組中? ($arrCount

$arr = array("complete","fail","complete","exit","fail","fail","complete"); 
$arrCount = Array(); 

foreach($arr as $value){ 
    $arrCount[$value] = array_key_exists($value,$arrCount) ? $arrCount[$value]+1 : 1; 
    //If this key exists, add 1 to it, else make it equal to 1 
} 

這將產生與該鍵在各種標籤和值同樣的標籤總的陣列。

print_r輸出:

陣列([完成] => 3 [失敗] => 3 [出口] => 1)

+0

我收到「Notice:Undefined index:complete in ..」for each $ key – Ivan 2013-02-27 13:55:41

+0

@Ivan我爲你做了一個更新。 – George 2013-02-27 14:00:30

+0

太棒了!謝謝!這正是我想要做的。我用@Niels回覆表格迴應來組合它,並得到了正確的結果。非常感謝! – Ivan 2013-02-27 14:06:25

0

的僞代碼:

$arr = array("complete","fail","complete","exit","fail","fail","complete"); 
$counts = array(); 
foreach($arr => $key as $value) 
{ 
    if(array_key_exists($value, $counts)) 
    { 
     $counts[$value]++; 
    }else{ 
     $counts[$value] = 1; 
    } 
} 
foreach($counts => $key as $value) 
{ 
    echo '<tr> 
    <td>' . $key . '</td> 
    <td>' . $value . '</td> 
</tr>'; 
} 

我們正在製作列表中元素的數組。如果項目存在,則增加否則使用值1創建。比循環另一次向用戶顯示每個項目的總數。

+0

這是一種正確的寫作方式「foreach($ counts => $ key as $ value)」?我得到語法錯誤 – Ivan 2013-02-27 13:57:59

+0

謝謝你,我用你的第二部分代碼最好的答案,它以我想要的方式工作;) – Ivan 2013-02-27 14:32:00

0

也許我錯過了一點,但正常循環的問題是什麼? 例如:

function countByValue($array, $value){ 
    $count = 0; 
    foreach($array as $val){ 
     if ($val == $value){ 
      $count++; 
     } 
    } 
    return $count; 
} 

,如果你想指望他們一下子與F4R-20的答案去

$complete = countByValue($arr, 'complete'); 

調用它。