如何在php中填充空的多维数组?

时间:2014-04-17 15:09:41

标签: php arrays multidimensional-array push

我想使用函数array_push填充一个空数组,但是我得到一个错误,参数1应该是数组但是给出了null,这是我的代码:

public $docs = array("ant ant bee", "dog bee dog hog dog ant dog", "cat gnu eel fox");

public function terms(){

    $temp = array();
    $terms = array(array());
    $docs = $this->docs;

    for($i = 0; $i < sizeof($docs); $i++){

        $temp[$i] = preg_split('/ /', $docs[$i], null, PREG_SPLIT_NO_EMPTY);
    }           

    for($i = 0; $i < sizeof($temp); $i++){

        for($j = 0; $j < sizeof($temp[$i]); $j++){

            for($k = 0; $k < sizeof($temp[$i]); $k++){

                if($temp[$i][$j] != $terms[$i][$k])

                    array_push($terms[$i], $temp[$i][$k]);
            }
        }
    }

    return $terms;
}
}

4 个答案:

答案 0 :(得分:2)

根据您对预期结果的评论,这应该是非常接近:

foreach($this->docs as $value) {
    $terms[] = array_unique(array_filter(explode(' ', $value)));
}    
return $terms;

答案 1 :(得分:1)

我不确定你对所有这些循环做了什么,但你现在的问题很容易通过改变来解决:

array_push($terms[$i], $temp[$i][$k]);

为:

$terms[$i][] = $temp[$i][$k];

这与array_push()的作用相同,但如果$terms[$i]尚不存在则会自动创建{<1}}。

答案 2 :(得分:0)

可以按照以下方式实现

function terms(){   
    $docs = array("ant ant bee", "dog bee dog hog dog ant dog", "cat gnu eel fox");
    $temp = array();
    $terms = array();

    for($i = 0; $i < sizeof($docs); $i++){
        $temp[$i] = preg_split('/ /', $docs[$i], null, PREG_SPLIT_NO_EMPTY);
    } 
    foreach ($temp as $key => $value) {
        $temp[$key] = array_unique($value); 
    } 
    return $temp; 
}

答案 3 :(得分:0)

不确定声明$terms = array(array());是否符合您的要求....

解决方案1:首先初始化$ terms

$terms = array();

for($i = 0; $i < sizeof($docs); $i++){
    $terms[$i] = array();
}

或更好:插入

$terms[$i] = array();

进入现有循环:初始化$temp的循环,或第二个for($i...)循环,就在for($j ...)之前

解决方案2:在使用array_push之前测试术语[$ i]

for ($i ...) {
    for ($j ...) {
        for ($k ...) {
            if (!is_array($terms[$i])) $terms[$i] = array();
            // your stuff here
        }
    }
}

但我更喜欢第一种解决方案......