我遇到了这个问题。 我有两个对象。一种是用字创建数组,另一种用于字符串动作。我实例化一个向数组添加单词的对象。当我在foreach循环中将此数组作为参数传递时,我得到一个错误说法 “strtolower期望参数1为字符串,给定数组”。我花了一些时间思考为什么然后我决定硬编码数组并将其作为参数传递到同一个foreach循环中。令我惊讶的是它有效。 我不知道发生了什么。
<?php
class Words
{
private $words = [];
public function addWords(...$string)
{
$this->words[] = $string;
}
public function getWords()
{
return $this->words;
}
}
class StrAction
{
public function lowerCase($str)
{
if (is_array($str)) {
$array = [];
foreach ($str as $word) {
$newWord = strtolower($word);
$array[] = $newWord;
}
return $array ;
}else{
return strtolower($str);
}
}
}
$wordBank = new Words();
$wordBank->addWords('HELLO', 'Good Morning', 'alright mate');
$array = ['hello', 'good morning', 'alright mate'];
$strAction = new StrAction();
$strAction->lowerCase($wordBank->getWords());
// $strAction->lowerCase($array);
?>
答案 0 :(得分:4)
使用...
定义可变参数时,它被视为数组。
因此,$string
函数定义中的addWords
已经是数组。
并且正在做
$this->words[] = $string;
您向$this->words
添加了一个子数组。
要避免这种情况,请将新值合并到$this->words
:
$this->words = array_merge($this->words, $string);
答案 1 :(得分:2)
$ this-&gt; words [] = $ string;它是多维数组。这是主要问题