douba4933 2018-04-18 11:45
浏览 29
已采纳

Php foreach返回错误

I came across this problem. I have two object. One is just to create an array with words and the other one is for string actions. I instantiate an object that add words to an array. When I pass this array as an argument in foreach loop I get an error saying "strtolower expects parameter 1 to be string, array given". I spent some time thinking why is that and then I decided to hardcode the array and pass it as an argument in the same foreach loop. To my suprise it worked. I do not know what is happening.

<?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条回答 默认 最新

  • dourong8495 2018-04-18 11:51
    关注

    When you define a variadic argument with ... it is considered an array.

    So, your $string in addWords function definition is already array. And doing

    $this->words[] = $string;
    

    you add a subarray to $this->words.

    To avoid this - merge new values to $this->words:

    $this->words = array_merge($this->words, $string);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀