2013-02-27 140 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'); 

调用它。