Php foreach返回错误

时间:2018-04-18 11:45:36

标签: php arrays foreach

我遇到了这个问题。 我有两个对象。一种是用字创建数组,另一种用于字符串动作。我实例化一个向数组添加单词的对象。当我在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);




?>

2 个答案:

答案 0 :(得分:4)

使用...定义可变参数时,它被视为数组

因此,$string函数定义中的addWords已经是数组。 并且正在做

$this->words[] = $string;

您向$this->words添加了一个子数组。

要避免这种情况,请将新值合并到$this->words

$this->words = array_merge($this->words, $string);

答案 1 :(得分:2)

$ this-&gt; words [] = $ string;它是多维数组。这是主要问题