从混合PHP数组中检索嵌套值

从混合PHP数组中检索嵌套值,php,Php,我正在使用PHP 5.4并返回如下数组结构: Array ( [0] => Array ( [HGS-SUB] => SimpleXMLElement Object ( [0] => 59.00 ) ) [1] => Array ( [DOMN-MTH]

我正在使用PHP 5.4并返回如下数组结构:

Array
(
    [0] => Array
        (
            [HGS-SUB] => SimpleXMLElement Object
                (
                    [0] => 59.00
                )

        )

    [1] => Array
        (
            [DOMN-MTH] => SimpleXMLElement Object
                (
                    [0] => 25.00
                )

        )

)
我不知道如何在
foreach
循环中检索(例如)字符串“HGS-SUB”和数字“59.00”。注意:
HGS-SUB
是直到运行时才知道的动态数据,所以我不能硬编码它。这是我的
foreach

foreach ($matchingProducts as $key => $value){
    EmitObjectDetails($value);
}
结果:

Array
(
    [HGS-SUB] => SimpleXMLElement Object
        (
            [0] => 59.00
        )

)


Array
(
    [DOMN-MTH] => SimpleXMLElement Object
        (
            [0] => 25.00
        )

)
我对循环的第一次迭代的期望结果是捕获字符串“HGS-SUB”和数字“59.00”。类似地,在循环的第二次迭代中,我希望捕获字符串“DOMN-MTH”和“25.00”

我尝试过各种实验,例如:

  • $value[0]
  • $value[$key]
  • $value->{0}
  • $value[0][0]

什么都不管用。请帮助。

您需要对每个元素执行
操作,然后检查元素是否为
是否为数组


或者,您需要定义一个函数,该函数应返回数组的所有元素,并且如果元素是数组,则该函数应被称为递归函数。

这应该在不使用额外foreach的情况下实现这一点:

foreach ($matchingProducts as $key => $value) {

    $string  =  key($value);
    $number  =  $value[$string]->{0};

    echo $string .' '. $number ."\n";
}
使用
key()
()将返回
$value
数组的“未知键名”。然后,您可以使用带有
$value
数组的“now known key”来提取对象的内部属性(根据您的示例,该属性为
0


这是一个工作测试示例:

// Making up a dummy to match your example content:
$matchingProducts = array();
$row1 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><root></root>', null, false);
$row2 = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><root></root>', null, false);
$row1->{0} = '59.00';
$row2->{0} = '25.00';
$matchingProducts[0] = array('HGS-SUB'=> $row1 );
$matchingProducts[1] = array('DOMN-MTH'=> $row2 );

print_r($matchingProducts);

foreach($matchingProducts as $key => $value) {

    $string = key($value);
    $number = $value[$string]->{0};

    echo $string .' '. $number ."\n";
}

您需要嵌套另一个foreach循环,因为它似乎是simplexmlement对象的一部分,您可以添加到如何生成此数组的问题中吗;非常好,谢谢你!但是如果前面没有一个
$
,怎么能有
键呢。。。它获取当前数组指针的键。(也用此位更新了答案)
Array
(
    [0] => Array
        (
            [HGS-SUB] => SimpleXMLElement Object
                (
                    [0] => 59.00
                )

        )

    [1] => Array
        (
            [DOMN-MTH] => SimpleXMLElement Object
                (
                    [0] => 25.00
                )

        )

)
HGS-SUB 59.00
DOMN-MTH 25.00