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



我想用函数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;
}
}

根据您对预期结果的评论,这应该可以做到,或者非常接近:

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

我不确定您对所有这些循环到底做了什么,但您当前的问题很容易通过更改来解决:

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

至:

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

这与array_push()的作用相同,不同之处在于,如果$terms[$i]还不存在,则会自动创建它。

可以按照以下实现

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; 
}

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

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

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

或者更好:插入

$terms[$i] = array();

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新