将数据转换为字符串

时间:2018-04-02 11:37:26

标签: php laravel data-processing

我需要转换数据,如下所示:

{
    "action": "PushEvent",
    "commits_count": 5,
    "repository": {"name":"example-repo"}
}

到一个字符串,如下所示:用户将5个提交推送到example-repo

问题是,我需要支持非常多的操作类型。什么是这个问题的最佳解决方案,我应该在哪里放置代码(Laravel)?

3 个答案:

答案 0 :(得分:1)

我认为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']));

答案 1 :(得分:1)

我认为你最好把它放到Activity模型中(如果你想让模型保持干净,那就是一个特性)。对于方法本身,除了单独实现每个操作之外,您没有太多其他选项。也许你可以在使用switch-case时组合多个动作,但最难的部分可能是将动作翻译成动词。

或者,您也可以将其放入刀片组件中。如果您计划让通知看起来不错,这将是有意义的,例如如果你看下面的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>

如果您将活动编译成纯文本句子,您会注意到之后不能再创建相同的内容。

答案 2 :(得分:0)

你可以试试这样的事情

<?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();