PHP数组,也许有人可以帮助解释

时间:2010-11-23 17:41:31

标签: php arrays foreach

所以这是我尝试使用的数组的一部分,它是从xml文件中提取的。

Array
(
    [0] => Array
        (
            [SKU] => 0016
            [StandardProductID] => 32109876453210
            [Condition] => NEW
            [ItemPackageQuantity] => 1
            [Currency] => GBP
            [StandardPrice] => 5.00
            [DescriptionData] => Array
                (
                    [Title] => Product Title
                    [Brand] => Franks
                    [Ingredients] => Array
                        (
                            [Ingredient] => Array
                                (
                                    [0] => Water (Aqua)
                                    [1] => Dicetyldimonium Chloride
                                )

                        )

我已经知道我可以使用以下方法访问数组的第一列:  $ Details = std_class_object_to_array($ xml);

foreach ($Details[product] as $Detail) {

 if (strtoupper(trim(!empty($Detail[SKU])))) {
  $SKU = (strtoupper(trim($Detail[SKU])));
  echo $SKU;
 }
}

但是如何访问其他列,DescriptionData / Title和DescriptionData / Ingredients / Ingredient。有人可以整理或指出我正确的方向来处理数组中的不同级别吗?

非常感谢提前

5 个答案:

答案 0 :(得分:5)

第一点 - 数组键应该以字符串形式寻址:

// good:
$Details['product']

// bad:
$Details[product]

现在回答你的问题:

只使用更多的方括号来解决嵌套数组:

echo $Detail['DescriptionData']['Ingredients']['Ingredient'][0]; // "Water (Aqua)"

答案 1 :(得分:3)

$title = $Detail['DescriptionData']['Title'];
$brand = $Detail['DescriptionData']['Brand'];
$ingredients = $Detail['DescriptionData']['Ingredients']['Ingredient']; //sets it to the array
//etc...

答案 2 :(得分:1)

我相信您的foreach循环设置错误。假设$Details被定义为您在上面显示的数组:

foreach ($Details as $Detail) {
 echo $Detail['SKU'];
 echo $Detail['DescriptionData'];
 echo $Detail['DescriptionData']['Title'];
}

答案 3 :(得分:0)

echo $Detail['DescriptionData']['Title'];
foreach ($Detail['DescriptionData']['Ingredients']['Ingredient'] as $ingredient) {
  echo $ingredient;
}

答案 4 :(得分:0)

在PHP中,数组更像是“地图”或“关联数组”,具体取决于您要使用的术语。它们也可以遵循典型的数字索引简单数组的规则,这使得它在混合和匹配时更加混乱,但这不是手头的问题。

访问数组时,请记住每个元素都可以包含自己的数组。当您使用[]运算符时,您将获得该位置的元素,然后可以在此之后直接调用成员函数或进一步访问嵌套数组元素。

这意味着$ Details ['DescriptionData']将返回一个数组,并且因为数组可以使用[]访问元素,然后我们可以链接另一个访问:$ Details ['DescriptionData'] ['Ingredients']再次返回一个数组,所以我们可以进一步链接$ Details ['DescriptionData'] ['Ingredients'] ['Ingredient'],这是另一个数组,所以我们可以链接一次:

$ Details ['DescriptionData'] ['Ingredients'] ['Ingredient'] [0]返回一个字符串“Water(Aqua)”

字符串也可以使用[]运算符访问单个字符,因此我们可以通过执行以下操作获取Water中的第二个字符:
$详情['DescriptionData'] ['成分'] ['成分'] [0] [1] ==='a'

如果我们访问数组中的对象,您可以执行类似$ Array ['Index'] - > memberFunction();如果memberFunction返回一个数组,你最终会得到类似的东西:
$数组[ '索引'] - GT; memberFunction()[ 'ReturnedArrayIndex'];因为每次访问都对它左边的东西的返回值起作用。

应该注意的是,像这样的大型链条是脆弱的,因为在任何时候如果某些东西停止存在,你预期它会最终导致无效的表达。因此,最好避免编写如上所述的代码,即使它对理解访问如何工作很重要。