我想用函数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
}
}
}
但我更喜欢第一种解决方案。。。