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