Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据数组的名称获取数组的值?_Php_Xml - Fatal编程技术网

Php 如何根据数组的名称获取数组的值?

Php 如何根据数组的名称获取数组的值?,php,xml,Php,Xml,我有一些xml数据的格式如下: <ADDITIONALINFORMATION> <ITEM> <MULTIPLEVALUES>0</MULTIPLEVALUES> <NAME>Some Name Here 1</NAME> <VALUEARRAY></VALUEARRAY> <VALUE>123</VALUE&

我有一些xml数据的格式如下:

<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如果该语句为真。。?