【问题标题】:Converting data to string将数据转换为字符串
【发布时间】:2018-04-02 11:37:26
【问题描述】:

我需要转换数据,像这样:

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

到一个字符串,像这样:用户将 5 次提交推送到 example-repo

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

【问题讨论】:

  • 数据看起来总是像您描述的那样,还是结构可以改变?数据是来自模型还是其他?
  • Action 和 repository 是不变的,有时也可以有 type(例如 create、delete、modify)。数据来自 Activity 模型,它从缓存/GitHub 的 API 获取数据
  • 这个需要在php端还是js端转换?
  • 我没有任何限制,我正在寻找最好的方法。我将在未来发送通知,所以我认为 php 端将是最好的选择
  • 你用翻译吗?

标签: php laravel data-processing


【解决方案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']));

【讨论】:

    【解决方案2】:

    我认为您最好将其放入 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>
    

    你会注意到,如果你将你的活动编译成一个纯文本句子,你不能只是在之后创建相同的内容。

    【讨论】:

      【解决方案3】:

      你可以试试这样的

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

      【讨论】:

        猜你喜欢
        • 2015-10-29
        • 2015-11-21
        • 2013-10-26
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多