【问题标题】:Parse a string of commas and numbers解析一串逗号和数字
【发布时间】:2011-05-06 16:36:45
【问题描述】:

我找到了一个不错的 jQuery 插件。它将数据作为1202,39,2393,29,1,39发送到php服务器

我想从帖子中获取这些数据,我知道该怎么做。

我的想法是将1202,39,2393,29,1,39 放在一个字符串中。然后是一些如何循环它。

所以我会输入$string = '1202,39,2393,29,1,39'; 输出将类似于

 1202<br>
    39<br>
    2393<br>
    29<br>
    1<br>
    39<br>

对于循环中的每个 ID,我会检查其是否为有效 ID。如果存在某些东西,我知道如何检查 MySql。我不确定的部分是从字符串中获取循环中的每个 id,然后用它做一些事情。这似乎很难解释,我希望我清楚。

【问题讨论】:

标签: php mysql ajax validation


【解决方案1】:

你不应该在循环中运行 SQL 查询,所以我想说你根本不应该 explode() 它(其他人建议的)。这是一个非常糟糕的做法,因为如果你有 20 个 ID,这将意味着 20 个数据库调用,这是非常低效的。尽可能减少数据库调用,因为它们很昂贵。

我会运行一个查询,返回数据库中的那些 ID。

您的查询类似于

 select id from table where id in (YOUR_STRING_ESCAPED)

请务必先转义您的$string,例如使用mysql_real_escape_string()

查询返回的 ID 是可以安全输出的 ID。

【讨论】:

  • select id from accounts where id in 2,8,9,10 给出 #1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '2,8,9,10 LIMIT 0, 30' 附近使用正确的语法
  • @Keverw 注意字符串周围的()
  • 哦。我在想你只是把它放进去显示一个变量。谢谢!我的应用程序将同时使用此方法和循环方法。一个是保存草稿时检查,另一个用于插入到每个用户的邮箱中。
  • @Keverw 如果 insert in to each users mailbox 是指 SQL INSERT 调用,则也不应该从循环中调用它们。 INSERT支持一次调用插入多条记录。
【解决方案2】:

要将字符串分解成单独的部分,请使用explode

$string = '1202,39,2393,29,1,39'; 
$list = explode(",", $string);

然后你可以对数组做任何你想做的事情,例如

foreach ($list as $item)
{
    print $item."<br>";
}

【讨论】:

    【解决方案3】:

    先使用explode()创建数组:

    $string = '1202,39,2393,29,1,39';
    $array= explode(",", $string);
    

    然后使用foreach 循环进行检查:

    foreach ($array as &$value) {
        if($value == etc.....//perform your checks here.
    }
    

    【讨论】:

    • 这就是垒球问题的问题。我是 SO 的新手,在回答很多简单的问题或一些难的问题之间徘徊。几个小时前,我为一个问题写了一个详尽的答案,在我发布前不到一分钟,这个问题就被删除了。 *sob*
    • 这似乎是一个垒球问题...我想知道每个人都建议在循环中运行 SQL 查询。
    【解决方案4】:
    $string = '1202,39,2393,29,1,39';
    $array = explode(',', $string);
    for($i=0;$i<count($array);$i++) {
        $sql = "CHECK FOR VALID ID WHERE id=" . $array[$i];
    }
    

    这应该让您通过 sql 单独检查所有这些 id。

    【讨论】:

      【解决方案5】:

      假设您使用的是 PHP:

      $string = '1202,39,2393,29,1,39';
      $data = explode(",", $string);
      echo "<pre>"; print_r($data); echo "</pre>"
      
      // Outputs:
      // Array
      // (
      //     [0] => 1202
      //     [1] => 39
      //     [2] => 2393
      //     [3] => 29
      //     [4] => 1
      //     [5] => 39
      // )
      
      // Then you can iterate through the array
      foreach ($data AS $value) {
        // Validate the $value
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 2021-09-17
        • 1970-01-01
        相关资源
        最近更新 更多