使用 $variable 作为索引取消设置 PHP SIMpleXML 节点

Posted

技术标签:

【中文标题】使用 $variable 作为索引取消设置 PHP SIMpleXML 节点【英文标题】:Unsetting PHP SImpleXML node with $variable as index 【发布时间】:2012-08-12 02:33:51 【问题描述】:

在使用变量索引而不是数字索引时,我在取消设置 SimpleXML 节点时遇到问题。

这是我调用 simpleXML 的代码:

$highlights = new SimpleXMLElement($prj['project_xmldata']);
$node=$_POST['node'];
if(count($highlights->highlights->highlight)>0) 
   unset($highlights->highlights->highlight[$node]);
   print_r($highlights);

print_r 语句的内容仍然显示原始 XML 数据。但是,如果我使用数字索引而不是变量 $node 取消设置节点,我会得到正确的响应,并删除我取消设置的节点。

我也尝试用双引号封装变量,并确保 $_POST['node'] 是正确的值。是我做错了什么,还是不能在方括号内放一个变量?

【问题讨论】:

【参考方案1】:

把你的代码改成这个,然后告诉我它是什么意思:

$highlights = new SimpleXMLElement($prj['project_xmldata']); 
$node=$_POST['node']; 
if(isset($highlights->highlights->highlight[$node]))     
    unset($highlights->highlights->highlight[$node]);    
    print_r($highlights); 
 
else
    echo $node." = ".gettype($node);

确保节点正确。确保它被注册为 int 而不是字符串。

$variable[0] 不同于 $variable["0"]

【讨论】:

就是这样!我想简单地检查 (is_numeric) 是否确保它是一个整数,但它仍然是一个字符串。使用 settype 我设法让它工作,非常感谢您的帮助! 经验法则:is_numeric 几乎不是您想要的功能。不相信我?试试is_numeric("1.09e52")。也就是说,这是 SimpleXML 不是普通 php 的另一种情况 - 对于真正的 PHP 数组,$variable[0]$variable["0"] 绝对相同。

以上是关于使用 $variable 作为索引取消设置 PHP SIMpleXML 节点的主要内容,如果未能解决你的问题,请参考以下文章

取消设置操作后将PHP数组索引重置为从0开始[重复]

如何在php中取消设置数组元素匹配索引?

取消设置 php 参考

如何在取消设置变量后修复会话未启动

如何取消设置 PHP 中作为数组的 _SESSION 变量

PHP - 在foreach循环中取消设置数组元素[重复]