JSON 结构改变,破坏方法
JSON Structure changed, breaks methods
目前,我的数据库中存储了以下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 函数,它读取类似数组的列并转换每个 column/row。我可以这样称呼它:
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);
它实际上 return 一个数组:
array:3 [▼
0 => "My name is Trevor"
1 => ""
2 => ""
]
那么为什么它被看作是一个字符串呢?
您可以将 $rows
作为数组发送到 rule()
函数,只需将其包装在 []
:
中
array_map([$this, 'rule'], [$rows]);
然后该函数将接收一个数组,而不是一个字符串。
否则,您可以重构代码并改用字符串,但我看不出有多大优势。
目前,我的数据库中存储了以下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 函数,它读取类似数组的列并转换每个 column/row。我可以这样称呼它:
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);
它实际上 return 一个数组:
array:3 [▼
0 => "My name is Trevor"
1 => ""
2 => ""
]
那么为什么它被看作是一个字符串呢?
您可以将 $rows
作为数组发送到 rule()
函数,只需将其包装在 []
:
array_map([$this, 'rule'], [$rows]);
然后该函数将接收一个数组,而不是一个字符串。
否则,您可以重构代码并改用字符串,但我看不出有多大优势。