【问题标题】:Converting new lines with quotes and comma in PHP [duplicate]在PHP中用引号和逗号转换新行[重复]
【发布时间】:2017-06-28 18:31:56
【问题描述】:

我正在尝试将 textarea 文本转换为可以放入 postcodes.io 检查器 API 的字符串

文本区域示例:

TW7 8PX
TW14 8NU
W3 7JW

这需要转换为:

"TW7 8PX", "TW14 8NU", "W3 7JW"

目前我正在使用手动字符串:

$query = '"TW7 8PX", "TW14 8NU", "W3 7JW"';
$postcode = new Postcode();
$lookup = $postcode->bulkLookup(array($query));

我认为 preg_replace 可以实现,但我似乎找不到我需要的组合。

【问题讨论】:

  • 您的$query 行将导致语法错误。请将您想要的输出更新为有效的内容,以便回答者可以提供准确的回复。
  • @mickmackusa 它没有引起任何问题,因为它是从我正在使用的测试页面中取出的。不过我已经找到答案了。还是谢谢你:)
  • 您的问题实际上导致了几个志愿者的时间浪费,因为他们试图将额外的双引号打包到字符串中。你已经按照你的理解解决了你自己的问题,而不是问题所述。查看错误:sandbox.onlinephpfunctions.com/code/… 请更新您的问题。
  • @mickmackusa 道歉,这不是我的本意
  • @mickmackusa 我承认 $query 行无效且具有误导性,但最初的信息很清楚,人们能够回答这个问题。此外,我不觉得这个问题是关于爆炸的,也不是由爆炸回答的,即使爆炸是解决方案的一部分。提供所提供的信息,我的解决方案说明了解决方案所需的正确格式是使用 json_encode 所固有的。

标签: php


【解决方案1】:

您只需使用一行代码即可实现此目的:

$result = '"' . implode('", "', explode("\n", $inputString)) . '"';

【讨论】:

    【解决方案2】:

    正则表达式用于匹配模式,如果你的模式只是单个字符(在这种情况下为换行符),它们就大材小用了。

    $query = '"'.str_replace("\n", '", "', $_POST['textarea']).'"';
    

    会做你想做的。

    【讨论】:

      【解决方案3】:

      似乎这里的每个人都错过了明显的 - 这是需要 json 的 REST api 的输入。

      解决办法如下:

      <?php
      
      $input = <<< EOT
      TW7 8PX
      TW14 8NU
      W3 7JW
      EOT;
      
      $output['postcodes'] = explode("\n", $input);
      echo json_encode($output);
      

      Tested

      【讨论】:

        【解决方案4】:

        这是一个可能的解决方案:

        <?php
        $input = <<< EOT
        TW7 8PX
        TW14 8NU
        W3 7JW
        EOT;
        foreach (explode("\n", $input) as $line) {
          $output[] = '"' . $line . '"';
        }
        var_dump(implode(', ', $output));
        

        另一种选择是:

        <?php
        $input = <<< EOT
        TW7 8PX
        TW14 8NU
        W3 7JW
        EOT;
        $output = '"' . implode('", "',explode("\n", $input)) . '"';
        var_dump($output);
        

        明显的输出是:

        string(31) ""TW7 8PX", "TW14 8NU", "W3 7JW""
        

        【讨论】:

        • 简单任务的代码太多。
        • @tilz0R 确实它看起来很臃肿,当然任何程序员都可以实现更脆的东西。但是请考虑必须添加引号字符的方式...
        • alternative 方法就是其中之一。或者使用str_replace 会更好更容易。
        • @tilz0R 我反对广泛传播的习惯,即声称只有一个任务的“正确”解决方案。第一种选择更灵活,例如,如果需要,它允许简单地添加对trim() 的调用...
        • 没那么难,还是单行,效率很高:$output = '"' . implode('", "', array_map('trim', explode("\n", $input))) . '"';
        【解决方案5】:

        事实证明这很简单,我只是看错了:

        $query = explode("\n", str_replace("\r", "", $_POST["postcodes"])); //Use Explode
        $postcode = new Postcode();
        $lookup = $postcode->bulkLookup($query); // Remove array()
        

        感谢大家的帮助

        【讨论】:

        • 这实际上是一种糟糕的形式,在您为自己的问题添加答案时,许多人基本上为您提供了相同的答案,以及您使用的所有技术。您的问题也忽略了显然您使用了邮政编码服务的 api,但没有提供有关该 api 需要作为输入的信息。同样对于@mickmackusa 的观点,当您对 $query 进行分配时,您的问题中包含无效的 php 代码行。您应该从您的问题中删除或修复该行。
        • 从您帖子中的链接中,我查看了各种 php 库的 github。列出了 4 个:github.com/ideal-postcodes/postcodes.io 我没有看到一个需要引用格式,因为大多数都使用数组,所以最好知道你在这里实际使用的是哪一个。将来使用 postcodes.io 的人可能会发现这个问题,如果问题完整,它可能会有价值。
        【解决方案6】:

        试试这个:

        $textAreaText = //whatever the field the value resides
        $convertedText = '"' . implode('", "',explode("\n", $textAreaText)) . '"';
        

        输出 “TW7 8PX”、“TW14 8NU”、“W3 7JW”

        在 PhpFiddle 上测试

        【讨论】:

        • 单引号中的 '\n' 只是文字 \n,而不是换行符。另外,他们正在尝试删除换行符。
        • @JonathanKuhn - 好收获……我的疏忽
        • OP 已经有多行,OP 想要单行。
        • @tilz0R - 明白了...进行了更正
        • 他们也在尝试引用每个值。
        猜你喜欢
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        相关资源
        最近更新 更多