preg_match() 期望参数 2 是字符串,数组给定错误

Posted

技术标签:

【中文标题】preg_match() 期望参数 2 是字符串,数组给定错误【英文标题】:preg_match() expects parameter 2 to be string, array given Error 【发布时间】:2017-01-02 15:43:50 【问题描述】:

我正在尝试插入数组,但出现错误:-

preg_match() 期望参数 2 是字符串,给定数组

我的表格如下:

!! Form::text('description[]',null,['class' => 'input-field input-sm','v-model'=>'row.description']) !!
!! Form::text('log_time[]',null,['class' => 'input-field input-sm','v-model'=>'row.log_time']) !!

我的控制器存储功能:

$this->validate($request, $this->rules);
        $data = array();
        foreach($request->description as $key=>$value)
            $data[]=[
                'description'=> $value, 
        'log_time'=> $request->log_time[$key], 
        'call_id'=>$call->id,
            ];
        
       PortLog::create($data);

当我检查 dd($data)

array:2 [▼
  0 => array:3 [▼
    "description" => "des"
    "log_time" => ""
    "call_id" => 16
  ]
  1 => array:3 [▼
    "description" => ""
    "log_time" => "hi"
    "call_id" => 16
  ]
]

我做错了什么?

【问题讨论】:

错误告诉你。 preg_match()(在您的代码中的任何位置)没有被赋予正确的字符串参数。您的这部分代码没有我可以看到的preg_match(),因此此代码似乎与问题无关。 @Anant 不是它的错误非法字符串 是的,对不起,我当时正在删除我的评论,但由于网络问题,它没有被删除。 【参考方案1】:

您似乎正试图在一个语句中插入多个 port_logs。但是,create() 方法仅用于创建模型的一个实例。您要么需要使用insert() 语句,要么通过$data 将代码更新为foreach 并发出多个create() 语句。

PortLog::insert($data);

// or

foreach($data as $row) 
    PortLog::create($row);

如果您只想插入数据,并且不想实例化一堆PortLog 实例,那么insert() 方法是可行的方法。如果您需要为每一行实例化一个新的PortLog 实例,那么create() 方法是可行的方法。

【讨论】:

【参考方案2】:

检查模型可填写字段...它似乎缺少 []

【讨论】:

以上是关于preg_match() 期望参数 2 是字符串,数组给定错误的主要内容,如果未能解决你的问题,请参考以下文章

将警告视为错误

如何转义 preg_match 模式中的斜杠字符? [复制]

PHP 正则

PHP - ini_set() 期望参数 2 是字符串,给定整数

警告:mysqli_query() 期望参数 2 是字符串,对象在

PHP 警告:in_array() 期望参数 2 是数组,字符串在