为什么我的小PHP脚本不起作用?

为什么我的小PHP脚本不起作用?,php,Php,我正在编写一个脚本,其中包含以以下格式输入的信息: John Smith 123 Fake St Riverwood, 11234 http://google.com 把它变成 <location id='1'> name='John Smith', address='123 Fake St', city='Riverwood', zip=' 11234', website='http://google.com' </location>

我正在编写一个脚本,其中包含以以下格式输入的信息:

John Smith
123 Fake St
Riverwood, 11234
http://google.com
把它变成

<location id='1'>
   name='John Smith',
   address='123 Fake St',
   city='Riverwood',
   zip=' 11234',
   website='http://google.com'
</location>
然后我得到这个输出:

<location id='1'>
   name='John Smith',
   address='123 Fake St',
   city='Riverwood',
   zip=' 11234',
   website='http://google.com'
</location>

<location id='2'>
   name='John Smith',
   address='123 Fake St',
   city='Riverwood',
   zip=' 11234',
   website='http://google.com'
</location>
基于$data数组中的位置。所以,即使我使用循环,这些变量的值总是相同的。例如:对于John Smith,$name变量的值应为$data[0],而对于Peter Gunderson,name变量的值应为$data[5]。但现在这两项都是$data[0]。因此,对于输入的每个信息块,输出显示相同的名称、地址等

所以问题是,如何修改这个脚本,使输出显示每个信息块的唯一结果,而不是重复第一个信息块

编辑 @gazler您的代码为上述示例提供了以下输出:

<location id='1'>
                    name='John Smith',
                    address='123 Fake St',
                    city='Riverwood',
                    zip=' 11234',
                    website='http://google.com'
</location>

<location id='2'>
                    name='',
                    address='Peter Smith',
                    city='',
                    zip='',
                    website='Woodsdale, 44566'
</location>

name='John Smith',
地址='123假街',
城市“Riverwood”,
zip='11234',
网站http://google.com'
名称=“”,
地址:='彼得·史密斯',
城市=“”,
zip=“”,
网站='Woodsdale,44566'

这将适用于您的脚本。

您需要在循环中更新
$dataBlocks

$locations = $_POST['locations'];
$xml = '';
$dataBlocks = explode("\n\n", $locations);
$num = 1;

for ($i=0; $i<count($dataBlocks); $i++) {
    // get data for current datablock
    $data = explode("\n", $dataBlocks[$i]);
    $name = $data[0];
    $address = $data[1];
    $data2 = explode(',', $data[2]);
    $city = $data2[0];
    $zip = $data2[1];
    $website = $data[3];

    $xml .= ("<location id='$num'>
                    name='$name',
                    address='$address',
                    city='$city',
                    zip='$zip',
                    website='$website'
             </location>");
    $num++;
}
$locations=$\u POST['locations'];
$xml='';
$dataBlocks=explode(“\n\n”,$locations);
$num=1;
对于($i=0;$i
$dataBlocks=explode(“\n\n”,$locations));
$num=1;
$xml=”“;
foreach($datablock作为$block){
$data=分解(“\n”,$block);
$name=$data[0];
$address=$data[1];
$data2=分解(',',$data[2]);
$city=$data2[0];
$zip=$data2[1];
$website=$data[3];
$xml.=”
name=“$name”,
地址=“$address”,
城市=“$city”,
zip=“$zip”,
网站=“$website”
";
$num++;
}
这就是我将要做的。但是,再一次,如果这是您想要的XML,那么这一个格式不好……一点也不好


编辑:哦,我使用了一个
foreach
,因为你根本不使用
$I
。如果你明白我的意思,比如,你使用
$I
作为
$num

为什么要这样使用XML?属性在标记中,而不是在内容中。@Thomas lol是的,我不知道任何东西xml,只是创建一个脚本,最终将返回一个xml格式,我将从现有文件中复制该格式。因此,我在这里只是编写虚拟xml内容(或者至少是我认为xml的外观)修复了它,没有考虑块之间的空间。Jason的解决方案更优雅。
$name = $data[0];
$address = $data[1];
$data2 = explode(',', $data[2]);
$city = $data2[0];
$zip = $data2[1];
$website = $data[3];
<location id='1'>
                    name='John Smith',
                    address='123 Fake St',
                    city='Riverwood',
                    zip=' 11234',
                    website='http://google.com'
</location>

<location id='2'>
                    name='',
                    address='Peter Smith',
                    city='',
                    zip='',
                    website='Woodsdale, 44566'
</location>
$name = $data[$i*5];
$address = $data[($i*5)+1];
$data2 = explode(',', $data[$i*5)+2]);
$city = $data2[0];
$zip = $data2[1];
$website = $data[3];
$locations = $_POST['locations'];
$xml = '';
$dataBlocks = explode("\n\n", $locations);
$num = 1;

for ($i=0; $i<count($dataBlocks); $i++) {
    // get data for current datablock
    $data = explode("\n", $dataBlocks[$i]);
    $name = $data[0];
    $address = $data[1];
    $data2 = explode(',', $data[2]);
    $city = $data2[0];
    $zip = $data2[1];
    $website = $data[3];

    $xml .= ("<location id='$num'>
                    name='$name',
                    address='$address',
                    city='$city',
                    zip='$zip',
                    website='$website'
             </location>");
    $num++;
}
$dataBlocks = explode("\n\n", $locations);

$num = 1;
$xml = "";
foreach($dataBlocks as $block){
    $data = explode("\n", $block);
    $name = $data[0];
    $address = $data[1];
    $data2 = explode(',', $data[2]);
    $city = $data2[0];
    $zip = $data2[1];
    $website = $data[3];

    $xml .= "<location id='$num'>
                    name='$name',
                    address='$address',
                    city='$city',
                    zip='$zip',
                    website='$website'
             </location>";

    $num++;
}