【问题标题】:PHP - Parse an array string into multiple array [closed]PHP - 将数组字符串解析为多个数组[关闭]
【发布时间】:2015-07-14 10:07:56
【问题描述】:

我开始学习 php。我有一个数组:

array (size=24)
0 => string 'Paris, 458 boulevard Saint-Germain' (length=34)
1 => string 'Paris, 343 boulevard Saint-Germain' (length=35)
2 => string 'Marseille, 343 boulevard Camille Flammarion' (length=44)
3 => string 'Marseille, 29 rue Camille Desmoulins' (length=37)
4 => string 'Marseille, 1 chemin des Aubagnens' (length=34)
5 => string 'Paris, 12 rue des singes' (length=25)
6 => string 'Paris, 34 quai VoLtAiRe' (length=24)
7 => string 'Paris, 34 rue Voltaire' (length=23)
8 => string 'Lille, 120 boulevard Victor Hugo' (length=33)
9 => string 'Marseille, 50 rue Voltaire' (length=27)
10 => string 'Toulouse, 90 rue Voltaire' (length=26)
...

我想做的是将每个字符串元素解析为 var ,例如:

$city = Lyon, Paris, Marseille...
$Number = 458, 343, 29..
$typeOfRoad = boulevard, rue, chemin, quaie...
$NameOfRoad = Saint-Germain, Camille Flammarion...

[编辑] 感谢@splash58,我解决了我的问题!非常感谢!

谢谢。 :)

【问题讨论】:

  • 你试过了吗?
  • 请不要发布您没有尝试解决的问题。您应该先尝试自己解决。如果您已经尝试过,那么您可以在您的问题中包含您的代码和研究,以显示什么对您不起作用。它也让其他人更容易回答您的问题!
  • 我当然试过了……

标签: php arrays algorithm parsing


【解决方案1】:
foreach($input as $item) {
   // Parse string
   if (preg_match('/^(?P<city>\w+),\s+(?P<Number>\d+)\s+(?P<typeOfRoad>\w+)\s+(?P<NameOfRoad>.+)$/', $item, $m));
   // remove numerous keys
   $m = array_diff_key($m, array_flip(range(0,4)));
   // make vars
   extract($m);
   echo "$city  $Number  $typeOfRoad  $NameOfRoad\n";
}

【讨论】:

  • 嘿@splash58,非常感谢你的正则表达式!我尝试解决另一个问题,每个循环都返回相同的结果(第一个地址),它不会递增。我如何对输入数组的下一个字符串执行相同的操作? :) 谢谢
  • 它已经让你问了。看看那里eval.in/398524 并问,如果我理解错了
  • 在你的代码中使用foreach($address
  • 我发现了我的问题:$address 被解析为一些 \r (pix-host.com/allimages/48972269.png) 而不是 (pix-host.com/allimages/94015808.png)。事实上, $address 已经从一个文本文件中解析出来了, $address = preg_split("/[\r]/", $textfile); ..
  • 而解决方案是简单地用 \n 而不是 \r 解析 $address
【解决方案2】:

试试这个代码:($array 是包含所有项目的数组)

<?php
  foreach ($array as $item) {
    /* explode in 4 segments max */
    $segment = explode(' ', $item, 4);
    $city = $segment[0];
    $number = $segment[1];
    $typeOfRoad = $segment[2];
    $nameOfRoad = $segment[3];

    /* here you can use the variables before the next loop */
    [...]
  }
?>

编辑:此代码假设第一个、第二个和第三个变量没有空格,否则无法分隔。

【讨论】:

  • explode的第三个参数表示最多只有4个段:)
  • 那些不是参数,在例子中,第一个参数有破折号(圣日耳曼),第二个和第三个参数没有空格,否则我们无法做到不知道极限。
【解决方案3】:
$string = 'Lille, 120 boulevard Victor Hugo';

echo $city = substr($string, 0, strpos($string, ','));
echo PHP_EOL;
$parts = explode(" ", $string);
array_shift($parts);
echo $num = $parts[0];
echo PHP_EOL;
array_shift($parts);
echo $type = $parts[0];
echo PHP_EOL;
array_shift($parts);
echo $roadName = implode($parts, " ");
echo PHP_EOL;

http://codepad.viper-7.com/4PwuWY

【讨论】:

    【解决方案4】:

    您可以为此使用正则表达式。它应该类似于以下内容:

    ^(.), (\d+) (\S+) (.)

    看看http://php.net/manual/de/function.preg-match.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多