我有一个看起来像这样的XML结构:
<?xml version="1.0"?>
<survey>
<responses>0</responses>
<question>
<title>Some survey question</title>
<answer>
<title>Answer 1</title>
<responses>0</responses>
</answer>
<answer>
<title>Answer 2</title>
<responses>0</responses>
</answer>
...
</question>
...
</survey>
我想增加与<responses>
数组中的值匹配的答案的$response
值。 $response
数组的结构如下:
$response = array(
'sid' => session_id(),
'answers' => array(
$_POST['input1'],
$_POST['input2'],
...
)
);
我的调查xml文件有一个名为$results
的SimpleXMLElement。这是我要怎么做:
$results = simplexml_load_file($surveyResultsFile);
$i = 1;
foreach($response->answers as $answer) {
$r = $results->xpath("question[$i]/answer[title='$answer']/responses");
$r = $r[0];
$r = intval($r) + 1;
$i++;
}
file_put_contents($surveyResultsFile, $results->asXML());
增大$r
的值后,不会保存我的结果。关于我在做什么错的任何想法吗?谢谢!
参考方案
脚本中有几个错误,这说明了为什么它不起作用。首先,您的$response
数组看起来不正确。您是否真的打算使用变量代替键?尝试print_r($response);
看看它是否真的是您想要的。
您可以使用数组符号(从0开始)选择第n个<question/>
$results->question[$i]
找到正确的问题后,您需要做的就是验证它是否确实包含XPath的建议答案。只有这样,您才能increment <responses/>
的值。另外,您必须转义特殊字符,例如<
或"
,这将使XPath查询失败。
最后,您可以使用asXML()
实际保存文件(此处无需file_put_contents()
。)我假设您的$surveyResults
是一个错字,并且您的意思是$surveyResultsFile
。
$response = array(
'sid' => session_id(),
'answers' => array(
$_POST['input1']
)
);
$results = simplexml_load_file($surveyResultsFile);
foreach ($response['answers'] as $i => $answer) {
$title = htmlspecialchars($answer);
$a = $results->question[$i]->xpath('answer[title="' . $title . '"]');
if (empty($a))
{
echo "No answer '$title' for question $i\n";
continue;
}
++$a[0]->responses;
}
$results->asXML($surveyResultsFile);
验证IBAN PHP - php在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…
PHP PDO组按列名称查询结果 - php以下PDO查询返回以下结果:$db = new PDO('....'); $sth = $db->prepare('SELECT ...'); 结果如下: name curso ABC stack CDE stack FGH stack IJK stack LMN overflow OPQ overflow RS…
php Singleton类实例将在多个会话中保留吗? - php举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…
通过>和<运算符比较日期 - php在我的所有php代码中,我都在UTC中存储日期和时间,但是我也在使用mysql存储日期时间(也在utc中)。大于和小于运算符会导致日期比较失败吗? $curdate=date('Y-m-d H:i:s'); if($start_datetime>$curdate) 参考方案 不。他们没有办法失败。为此,特意制作了MySQL日期格式。…
我如何在Safari浏览器中支持<video>? - php我想在野生动物园浏览器中显示视频,当我刷新浏览器时,什么也没有发生,该怎么办?这是我的代码:<!doctype html> <html> <head> <title>Simple Movie Player</title> </head> <body> <video sr…