目前,我的数据库中存储了以下JSON:
{
"1": [
{
"row": "My name is Trevor"
}
],
"2": [
{
"row": "Hey there! Some other text."
}
],
"3": [
{
"row": "And more."
}
]
}
现在,我正在使用的第三方API已将其输出格式更改为:
[
{
"0":"My name is Trevor"
},
{
"0":"Hey there! Some other text."
},
{
"0":"And more."
}
]
我有一个PHP函数,该函数读取数组状的列并转换每个列/行。我可以这样称呼它:
public function apply(array $table) : array
{
return $this->applyRule($table);
}
这叫什么:
public function applyRule(array $table): array
{
$out = [];
foreach ($table as $col => $rows) {
$out[$col] = array_map([$this, 'rule'], $rows);
}
return $out;
}
最终会调用解析规则,如下所示:
public function rule($content) : array
{
return preg_replace($this->pattern, $this->replacement, $content);
}
但是,在上面运行会给我以下错误:
regexTextReplace::rule() must be of the type array, string returned
我怀疑由于JSON结构的更改,我的解析功能不再起作用。
我不确定需要更改什么-有人可以帮助我吗?
因此,请看下面的答案,添加[$rows]
而不是$rows
可以解决该错误,但最终会创建一个嵌套数组。
如果我像这样进行模转储
dd($rows);
它实际上会返回一个数组:
array:3 [▼
0 => "My name is Trevor"
1 => ""
2 => ""
]
那为什么它被视为字符串?
答案 0 :(得分:1)
您可以将$rows
作为数组发送到rule()
函数,只需将其包装在[]
中即可:
array_map([$this, 'rule'], [$rows]);
然后该函数将接收一个数组,而不是字符串。
否则,您可以重构代码并改用字符串,但我看不出太多优势。