无法在PHP中计算数组

时间:2010-07-20 22:50:35

标签: php arrays

我在创建的课程中遇到了一个非常奇怪的问题。以下是该类的片段及其输出:

class WeirdHappenings
{
    protected $filters_list = array();

...

    function build()
    {
        $filters_count = count($this->filters_list);

        echo "<pre>";
        var_dump($this->filters_list);
        echo "<br>" . $filters_count . " is the count";
        echo "</pre>";
    }
}

在您提出之前,yes filters_list是一个填充的数组,在执行该类时会填充该数组。 Vardump证明:

array(2) {
  ["filter_1"]=>
  string(17) "calendar year nbr"
  ["filter_2"]=>
  string(18) "reviewer type desc"
}

0 is the count

这怎么可能?这是一个有两个元素的数组但是数不能告诉我它有多大?

PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:03:45) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

error_reporting = E_ALL | E_STRICT

这是决议:

class WeirdHappenings
{
    protected $filters_list = array();
    protected $thing = array("foo" => "bar", "ack" => "bar");

    function WeirdHappenings()
    {

    }

    function makeMeCry()
    {
        $filters = array();
        $filter_count = 1;

        $crapola = array("f1" => array("name" => "calendar year nbr"), "f2" => array("name" => "reviewer type desc"));

        foreach( $crapola as $key => $data )
        {
            $filters["filter_$filter_count"] = $data['name'];
            $filter_count++;
        }

        $this->filters_list = $filters;
    }

    function build()
    {       
        $filters_count = count($this->filters_list);
        $this->makeMeCry();
        echo "<pre>";
        var_dump($this->filters_list);
        var_dump($this->thing);
        echo "<br>" . $filters_count . " is the count of the filters";
        echo "<br>" . count($this->thing) . " is the count of the thing";
        echo "</pre>";
    }
}

$weirdthings = new WeirdHappenings();
$weirdthings->build();

正如许多评论所指出的,计数是在数组的人口之前进行的。

3 个答案:

答案 0 :(得分:1)

echo "<pre>";
var_dump($this->filters_list);
echo "<br>" . count($this->filters_list) . " is the count";
echo "</pre>";

我确定这会返回2.如果没有,可能会有一些“php magic”继续使用__get(),__ set(),_ _ sleep()或类似的东西

答案 1 :(得分:1)

PHP count()仅在两种情况下返回零:

echo count(null); // returns 0
echo count(array()); // returns 0

所以, 1)检查你的拼写; 2)打开错误报告:

error_reporting(E_ALL);
ini_set('display_errors', 'on');

3)尝试在另一个版本的PHP上运行您的代码(不使用Suhosin-Patch)。

答案 2 :(得分:0)