【问题标题】:PHP List Explode VariablePHP 列表爆炸变量
【发布时间】:2011-04-02 03:39:53
【问题描述】:

使用 PHP,我试图为每个特定文本赋予其自己的变量。我相信这可以通过使用 php.ini 中的爆炸列表功能来实现。类似于下面的代码:

list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);

但是,上面的代码使用冒号 (:) 分隔文本。我想分隔的文本在引号内,例如"WORD"。我想分开的示例文本如下:

“AULLAH1”“01/07/2010 15:28”“55621454”“123456”“123456.00”

我希望文本/数字 AULLAH101/07/2010 15:2855621454123456123456.00 都有一个特定的 PHP 变量。如果可能的话,我希望 PHP 的分解功能通过开头引号 (") 和结尾引号 (") 来分隔内容。

【问题讨论】:

  • 在最终结果中还是在传入数据中?
  • (1) 您是否可以控制这些文件的创建方式? (2) 您是否考虑过使用实际的数据库?
  • Pekka:感谢您的回复,非常感谢。我希望它作为传入数据。再次感谢您的回复。 :) quantumSoup:首先,感谢您的回复,我非常感谢他们。 ;) (1) 它只是一个文件,除此之外还有很多步骤。目前我只需要寻找给以下变量。 (2) 以前有人告诉过我,但不幸的是,我没有能力这样做。谢谢您的答复。 ;)

标签: php list variables explode


【解决方案1】:
explode('-', str_replace('"', '', str_replace('" "', '"-"', $data)));

【讨论】:

  • 这将在 "01/07/2010 15:28 " 上失败。
  • 您好奥马尔,感谢您的回复。我非常感激。正如 strager 所说,它确实在那个特定位置失败了。 :(再一次,我真的很感谢你的回应和你的努力。;)
【解决方案2】:

这应该使用正则表达式来完成。请参阅preg_match 函数。

【讨论】:

  • 这是低质量的,更适合作为评论。
【解决方案3】:

这是最简单的解决方案,但肯定不是最最强大的

$data = '"AULLAH1" "01/07/2010 15:28 " "55621454" "123456" "123456.00"';

list($user, $pass, $uid, $gid, $gecos, $home, $shell)
    = explode('" "', trim($data, '"'));

var_dump(array($user, $pass, $uid, $gid, $gecos, $home, $shell));

// gives:
array(7) {
  [0]=>
  string(7) "AULLAH1"
  [1]=>
  string(17) "01/07/2010 15:28 "
  [2]=>
  string(8) "55621454"
  [3]=>
  string(6) "123456"
  [4]=>
  string(9) "123456.00"
  [5]=>
  NULL
  [6]=>
  NULL
}

【讨论】:

  • 您好 Strager,我非常感谢您的回复和努力。老实说,我不喜欢整理数据的想法,尽管我知道它有时非常有用。抱歉,如果我似乎给您带来了负面影响,如前所述,我很感激您的回应。 ;) 谢谢。
  • @AUl 排列只是为了展示。
  • @AUllah1,@Artefacto 是正确的;我只是将元素放入一个数组中,以便轻松查看 var_dump 以表明它按预期工作。
  • 啊,太好了。为假设strager道歉。这似乎是一些惊人的编码。感谢您的回复。 ;) 谢谢。
【解决方案4】:

更好的方法是使用preg_match_all

$s = '"AULLAH1" "01/07/2010 15:28 " "55621454" "123456" "123456.00"';
preg_match_all('/"([^"]*)"/', $s, $matches);
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = $matches[1];

最类似的方法是使用preg_split

list($user, $pass, $uid, $gid, $gecos, $home, $shell) =
    preg_split('/"(?: ")?/', $s, -1, PREG_SPLIT_NO_EMPTY);

【讨论】:

  • @Timwi,它不会失败;在这种情况下,分配给list 会将NULL 分配给$home$shell
  • @strager 它应该失败吗? OP没有提到这一点,这与他目前的解决方案是一致的。
  • 啊,好的,您正在回复一条现已删除的评论。
  • 您好 Artefacto,非常感谢您的回复,并感谢您在回复中付出的所有努力。我使用了 preg_match_all 方法,它似乎工作得非常完美。另外,我也喜欢使用 preg_split 的想法,因为现在我将坚持第一种方法。再次感谢您的回复。谢谢您的帮助。 ;)
猜你喜欢
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多