将数据转换为字符串
Converting data to string
我需要转换数据,像这样:
{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}
到一个字符串,像这样:用户推送 5 次提交到 example-repo
问题是,我要支持的动作类型非常多。这个问题的最佳解决方案是什么?我应该把代码放在哪里 (Laravel)?
我认为 json_decode 是要走的路,例如:
$source = '{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}';
$actions = ['PushEvent' => 'pushed'];
$result = json_decode($source, true);
var_dump(sprintf('User %s %d commits to %s', $actions[$result['action']], $result['commits_count'], $result['repository']['name']));
我认为你最好将它放入 Activity
模型(或者特征,如果你想保持模型干净)。对于方法本身,除了单独实施每个操作外,您没有太多其他选择。也许您可以在使用 switch-case
时组合多个动作,但最难的部分可能是将动作转换为动词。
或者,您也可以将其放入 blade 组件中。如果您计划让您的通知看起来不错,这将是有意义的,例如如果您查看以下 HTML
<span class="activity">
<span class="activity-user">User</span> pushed
<span class="activity-count">5</span> commits to
<span class="activity-repository">
<a href="/path/to/example-repo">example-repo</a>
</span>.
</span>
您会注意到,如果将 activity 编译成纯文本句子,您不能事后创建相同的内容。
你可以试试这个
<?php
function convert_multi_array($glue, $arr) {
foreach ($arr as $key => $value) {
if (@is_array($value))
{
$arr[$key] = convert_multi_array ($glue, $arr[$key]);
}
}
return implode($glue, $arr);
}
$json_data = <<<END_OF_JSON
{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}
END_OF_JSON;
$array_data = json_decode($json_data, true);
$string_data = convert_multi_array(',', $array_data);
echo "<pre>";
print_r($json_data);
print_r($array_data);
echo($string_data);
die();
我需要转换数据,像这样:
{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}
到一个字符串,像这样:用户推送 5 次提交到 example-repo
问题是,我要支持的动作类型非常多。这个问题的最佳解决方案是什么?我应该把代码放在哪里 (Laravel)?
我认为 json_decode 是要走的路,例如:
$source = '{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}';
$actions = ['PushEvent' => 'pushed'];
$result = json_decode($source, true);
var_dump(sprintf('User %s %d commits to %s', $actions[$result['action']], $result['commits_count'], $result['repository']['name']));
我认为你最好将它放入 Activity
模型(或者特征,如果你想保持模型干净)。对于方法本身,除了单独实施每个操作外,您没有太多其他选择。也许您可以在使用 switch-case
时组合多个动作,但最难的部分可能是将动作转换为动词。
或者,您也可以将其放入 blade 组件中。如果您计划让您的通知看起来不错,这将是有意义的,例如如果您查看以下 HTML
<span class="activity">
<span class="activity-user">User</span> pushed
<span class="activity-count">5</span> commits to
<span class="activity-repository">
<a href="/path/to/example-repo">example-repo</a>
</span>.
</span>
您会注意到,如果将 activity 编译成纯文本句子,您不能事后创建相同的内容。
你可以试试这个
<?php
function convert_multi_array($glue, $arr) {
foreach ($arr as $key => $value) {
if (@is_array($value))
{
$arr[$key] = convert_multi_array ($glue, $arr[$key]);
}
}
return implode($glue, $arr);
}
$json_data = <<<END_OF_JSON
{
"action": "PushEvent",
"commits_count": 5,
"repository": {"name":"example-repo"}
}
END_OF_JSON;
$array_data = json_decode($json_data, true);
$string_data = convert_multi_array(',', $array_data);
echo "<pre>";
print_r($json_data);
print_r($array_data);
echo($string_data);
die();