首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从混合PHP数组中检索嵌套值

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

Stack Overflow用户
提问于 2018-03-07 16:23:04
回答 2查看 101关注 0票数 1

我正在使用PHP5.4并获得如下的返回数组结构:

代码语言:javascript
复制
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

代码语言:javascript
复制
foreach ($matchingProducts as $key => $value){
    EmitObjectDetails($value);
}

结果:

代码语言:javascript
复制
Array
(
    [HGS-SUB] => SimpleXMLElement Object
        (
            [0] => 59.00
        )

)


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

)

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

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

  • $value
  • $value$key;
  • $value->{0}
  • $value

毫无办法。请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-07 16:43:15

这应该可以在没有额外预兆的情况下完成:

代码语言:javascript
复制
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 )。

这是一个有用的测试示例:

代码语言:javascript
复制
// 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 (HGS-sub=> SimpleXMLElement Object ( => 59.00 ))1 => Array (DOMN => SimpleXMLElement Object ( => 25.00 )))HGS- 59.00 DOMN-MTH 25.00

票数 3
EN

Stack Overflow用户

发布于 2018-03-07 16:26:11

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49156713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档