从混合PHP数组

时间:2018-03-07 16:23:05

标签: php

我正在使用PHP 5.4并获得这样的数组结构:

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

        )

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

        )

)

我无法弄清楚如何检索(例如)字符串" HGS-SUB"和#34; 59.00"在foreach循环内。注意: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"和#34; 59.00"。类似地,在循环的第二次迭代中,我想捕获字符串" DOMN-MTH"和" 25.00"。

我尝试了各种各样的实验,例如:

  • $值[0]
  • $值[$键];
  • $值 - > {0}
  • $值[0] [0]

没有任何作用。请帮忙。

2 个答案:

答案 0 :(得分:3)

如果没有额外的预告,这应该可以做到这一点:

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

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

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

使用key()http://php.net/manual/en/function.key.php)将返回您的"未知密钥名称" $value数组。然后你可以使用"现在已知的密钥"使用$value数组来拉取对象的内部属性(根据您的示例,该属性为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";
}

输出:

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

答案 1 :(得分:0)

您需要执行foreach,然后检查元素是否为is_array

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

相关问题