所以这是我尝试使用的数组的一部分,它是从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。有人可以整理或指出我正确的方向来处理数组中的不同级别吗?
非常感谢提前
答案 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'];因为每次访问都对它左边的东西的返回值起作用。
应该注意的是,像这样的大型链条是脆弱的,因为在任何时候如果某些东西停止存在,你预期它会最终导致无效的表达。因此,最好避免编写如上所述的代码,即使它对理解访问如何工作很重要。