如何计算具有相同属性的数组

时间:2016-08-11 13:51:55

标签: php

我有一个如下所示的数组。我想要的是根据$my[]['title']项的数量回应一个单词。在这种情况下,这个词必须重复4次。 sudo代码是这样的:

<?php
$my[0]['title']='first title';
$my[0]['description']='description';
$my[0]['date']='date';
$my[1]['title']='second title';
$my[1]['description']='description';
$my[1]['date']='date';
$my[2]['title']='third title';
$my[3]['title']='forth title';

for($i=0;$i<count($my[]['title'];$i++)
    echo 'this is test';
?>

7 个答案:

答案 0 :(得分:1)

您的测试数据可以使用foreach循环正常运行,但假设您的数组可以包含不具有标题键的行,则可以使用{{3 }}:

$count = count(array_column($my, 'title'));

for($i=0; $i<$count; $i++) {
    echo 'this is test';
}

答案 1 :(得分:0)

这是foreach的用途。它迭代整个数组

foreach($my as $row) echo 'This is my test;

每个数组条目一次你想要的回音

答案 2 :(得分:0)

$count = 0;
foreach($my as $val){
    if(isset($val['title'])){
        echo 'this is test';       
        $count++;
    }
}

输出&#34;这是测试&#34;取决于它看到title索引的次数。

工作代码:array_column

答案 3 :(得分:0)

您可以使用array_column

$titleCount = count(array_column($my, 'title'));
for($i=0; $i<$titleCount; $i++)
    echo 'this is test';
?>

http://php.net/manual/en/function.array-column.php

根据链接手册,这可以从php v5.5获得。

如果您使用的是旧版本(您应该真正更新...),那么这里是等效的用户定义函数(来自手册评论部分):

if(!function_exists("array_column"))
{

    function array_column($array,$column_name)
    {

        return array_map(function($element) use($column_name){return $element[$column_name];}, $array);

    }

}

答案 4 :(得分:0)

如果您使用的是php5.5及更高版本,请使用array_column函数捕获您想要的所有密钥,然后计算它们。     

$my[0]['title']='first title';
$my[0]['description']='description';
$my[0]['date']='date';
$my[1]['title']='second title';
$my[1]['description']='description';
$my[1]['date']='date';
$my[2]['title']='third title';
$my[3]['title']='forth title';

$a = array_column($my, 'title');

if (count($a) >= 4) {
    # your code 
}

答案 5 :(得分:0)

如果您使用array_column方法(正如许多人正确推荐的那样),您就不需要使用循环。您可以改为使用str_repeat

 echo str_repeat('this is test', count(array_column($my, 'title')));

答案 6 :(得分:0)

foreach($my as $key => $val){
    if ( isset( $val['title']) ){
        echo $key;       
    }
}