Php 如何根据数组的名称获取数组的值?
我有一些xml数据的格式如下:Php 如何根据数组的名称获取数组的值?,php,xml,Php,Xml,我有一些xml数据的格式如下: <ADDITIONALINFORMATION> <ITEM> <MULTIPLEVALUES>0</MULTIPLEVALUES> <NAME>Some Name Here 1</NAME> <VALUEARRAY></VALUEARRAY> <VALUE>123</VALUE&
<ADDITIONALINFORMATION>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 1</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>123</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 2</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>abc</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 3</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>456</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 4</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>def</VALUE>
</ITEM>
</ADDITIONALINFORMATION>
我如何获得“Some Name Here 3”的值
我不能使用像$item[3]这样的东西,因为有不同数量的项。这听起来像是xpath的工作:
//ITEM[NAME="Some Name Here 3"]
将获取所需的元素节点。和都支持xpath。我将让您选择要使用哪一个。这听起来像是xpath的工作:
//ITEM[NAME="Some Name Here 3"]
将获取所需的元素节点。和都支持xpath。我将让您选择要使用哪一个。这听起来像是xpath的工作:
//ITEM[NAME="Some Name Here 3"]
将获取所需的元素节点。和都支持xpath。我将让您选择要使用哪一个。这听起来像是xpath的工作:
//ITEM[NAME="Some Name Here 3"]
将获取所需的元素节点。和都支持xpath。我将留给您选择要使用的元素。使用字符串比较函数并获取该元素的值
foreach($listing->ADDITIONALINFORMATION->ITEM as $item) {
if (strcmp($item->NAME,'Some Name Here 3') == 0) {
$value = $item->VALUE;
}
}
使用字符串比较函数并获取该元素的值
foreach($listing->ADDITIONALINFORMATION->ITEM as $item) {
if (strcmp($item->NAME,'Some Name Here 3') == 0) {
$value = $item->VALUE;
}
}
使用字符串比较函数并获取该元素的值
foreach($listing->ADDITIONALINFORMATION->ITEM as $item) {
if (strcmp($item->NAME,'Some Name Here 3') == 0) {
$value = $item->VALUE;
}
}
使用字符串比较函数并获取该元素的值
foreach($listing->ADDITIONALINFORMATION->ITEM as $item) {
if (strcmp($item->NAME,'Some Name Here 3') == 0) {
$value = $item->VALUE;
}
}
如果你问我(或kojiro),这是Xpath的一项工作,但是你可以完全像已经做过的那样做,你只需要输出你的值:
...
$val = $item->VALUE;
echo $val;
...
使用xpath可以在所有元素上进行迭代,因为查询已经执行,并且已经给出了更具体的结果:
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
完整示例:
<?php
/**
* @link http://stackoverflow.com/questions/24370072/how-to-get-the-value-of-an-array-based-on-its-name
*/
$buffer = <<<XML
<LISTING>
<ADDITIONALINFORMATION>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 1</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>123</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 2</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>abc</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 3</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>456</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 4</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>def</VALUE>
</ITEM>
</ADDITIONALINFORMATION>
</LISTING>
XML;
/**
* xpath string handling xpath 1.0 "quoting"
*
* @link http://hakre.wordpress.com/2013/07/11/mitigating-xpath-injection-attacks-in-php/
*
* @param string $input
*
* @return string
*/
function xpath_string($input) {
if (false === strpos($input, "'")) {
return "'$input'";
}
if (false === strpos($input, '"')) {
return "\"$input\"";
}
return "concat('" . strtr($input, array("'" => '\', "\'", \'')) . "')";
}
$listing = simplexml_load_string($buffer);
foreach ($listing->ADDITIONALINFORMATION->ITEM as $item) {
if ($item->NAME == 'Some Name Here 3') {
$val = $item->VALUE;
echo $val;
}
}
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
如果你问我(或kojiro),这是Xpath的工作,但是你可以完全像你已经做过的那样做,你只需要输出你的值:
...
$val = $item->VALUE;
echo $val;
...
使用xpath可以在所有元素上进行迭代,因为查询已经执行,并且已经给出了更具体的结果:
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
完整示例:
<?php
/**
* @link http://stackoverflow.com/questions/24370072/how-to-get-the-value-of-an-array-based-on-its-name
*/
$buffer = <<<XML
<LISTING>
<ADDITIONALINFORMATION>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 1</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>123</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 2</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>abc</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 3</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>456</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 4</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>def</VALUE>
</ITEM>
</ADDITIONALINFORMATION>
</LISTING>
XML;
/**
* xpath string handling xpath 1.0 "quoting"
*
* @link http://hakre.wordpress.com/2013/07/11/mitigating-xpath-injection-attacks-in-php/
*
* @param string $input
*
* @return string
*/
function xpath_string($input) {
if (false === strpos($input, "'")) {
return "'$input'";
}
if (false === strpos($input, '"')) {
return "\"$input\"";
}
return "concat('" . strtr($input, array("'" => '\', "\'", \'')) . "')";
}
$listing = simplexml_load_string($buffer);
foreach ($listing->ADDITIONALINFORMATION->ITEM as $item) {
if ($item->NAME == 'Some Name Here 3') {
$val = $item->VALUE;
echo $val;
}
}
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
如果你问我(或kojiro),这是Xpath的工作,但是你可以完全像你已经做过的那样做,你只需要输出你的值:
...
$val = $item->VALUE;
echo $val;
...
使用xpath可以在所有元素上进行迭代,因为查询已经执行,并且已经给出了更具体的结果:
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
完整示例:
<?php
/**
* @link http://stackoverflow.com/questions/24370072/how-to-get-the-value-of-an-array-based-on-its-name
*/
$buffer = <<<XML
<LISTING>
<ADDITIONALINFORMATION>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 1</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>123</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 2</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>abc</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 3</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>456</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 4</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>def</VALUE>
</ITEM>
</ADDITIONALINFORMATION>
</LISTING>
XML;
/**
* xpath string handling xpath 1.0 "quoting"
*
* @link http://hakre.wordpress.com/2013/07/11/mitigating-xpath-injection-attacks-in-php/
*
* @param string $input
*
* @return string
*/
function xpath_string($input) {
if (false === strpos($input, "'")) {
return "'$input'";
}
if (false === strpos($input, '"')) {
return "\"$input\"";
}
return "concat('" . strtr($input, array("'" => '\', "\'", \'')) . "')";
}
$listing = simplexml_load_string($buffer);
foreach ($listing->ADDITIONALINFORMATION->ITEM as $item) {
if ($item->NAME == 'Some Name Here 3') {
$val = $item->VALUE;
echo $val;
}
}
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
如果你问我(或kojiro),这是Xpath的工作,但是你可以完全像你已经做过的那样做,你只需要输出你的值:
...
$val = $item->VALUE;
echo $val;
...
使用xpath可以在所有元素上进行迭代,因为查询已经执行,并且已经给出了更具体的结果:
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
完整示例:
<?php
/**
* @link http://stackoverflow.com/questions/24370072/how-to-get-the-value-of-an-array-based-on-its-name
*/
$buffer = <<<XML
<LISTING>
<ADDITIONALINFORMATION>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 1</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>123</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 2</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>abc</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 3</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>456</VALUE>
</ITEM>
<ITEM>
<MULTIPLEVALUES>0</MULTIPLEVALUES>
<NAME>Some Name Here 4</NAME>
<VALUEARRAY></VALUEARRAY>
<VALUE>def</VALUE>
</ITEM>
</ADDITIONALINFORMATION>
</LISTING>
XML;
/**
* xpath string handling xpath 1.0 "quoting"
*
* @link http://hakre.wordpress.com/2013/07/11/mitigating-xpath-injection-attacks-in-php/
*
* @param string $input
*
* @return string
*/
function xpath_string($input) {
if (false === strpos($input, "'")) {
return "'$input'";
}
if (false === strpos($input, '"')) {
return "\"$input\"";
}
return "concat('" . strtr($input, array("'" => '\', "\'", \'')) . "')";
}
$listing = simplexml_load_string($buffer);
foreach ($listing->ADDITIONALINFORMATION->ITEM as $item) {
if ($item->NAME == 'Some Name Here 3') {
$val = $item->VALUE;
echo $val;
}
}
$name = 'Some Name Here 3';
$query = sprintf('//ITEM[NAME=%s]/VALUE', xpath_string($name));
list($value) = $listing->xpath($query) + [NULL];
echo $value;
我不明白:你想得到哪个值?是不是456
?echo$item->value代码>如果该语句为真..?我不明白:您试图获取哪个值?是456
?echo$item->value代码>如果该语句为真..?我不明白:您试图获取哪个值?是456
?echo$item->value代码>如果该语句为真..?我不明白:您试图获取哪个值?是456
?echo$item->value代码>如果该语句为真。。?