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 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分