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

PHP数组,也许有人可以帮助解释一下,php,arrays,foreach,Php,Arrays,Foreach,这里是我尝试使用的数组的一部分,它是从xml文件中拉入的 Array ( [0] => Array ( [SKU] => 0016 [StandardProductID] => 32109876453210 [Condition] => NEW [ItemPackageQuantity] => 1 [Currency] =&

这里是我尝试使用的数组的一部分,它是从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_数组($xml)

但是如何访问其他列,DescriptionData/Title和DescriptionData/Components/Components。有人能把我放在一起或给我指出正确的方向来处理数组中的不同级别吗


提前非常感谢

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

$title = $Detail['DescriptionData']['Title'];
$brand = $Detail['DescriptionData']['Brand'];
$ingredients = $Detail['DescriptionData']['Ingredients']['Ingredient']; //sets it to the array
//etc...
foreach ($Details as $Detail) {
 echo $Detail['SKU'];
 echo $Detail['DescriptionData'];
 echo $Detail['DescriptionData']['Title'];
}

第一个点阵列键应作为字符串寻址:

// good:
$Details['product']

// bad:
$Details[product]
现在谈谈你的问题:

嵌套数组只需使用更多方括号即可寻址:

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

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

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

这意味着$Details['DescriptionData']将返回一个数组,因为数组可以使用[]访问元素,所以我们可以在之后链接另一个访问:$Details['DescriptionData']['Components'],它再次返回一个数组,这样我们就可以进一步链接$Details['DescriptionData']['Components'['Components']这是另一个数组,因此我们可以再链接一次:

$Details['DescriptionData']['Components']['Components'][0],返回字符串“水(水)”

字符串还可以使用[]运算符访问单个字符,因此我们可以通过执行以下操作获得水中的第二个字符:
$Details['DescriptionData']['Components']['Components'][0][1]=='a'

如果我们访问数组中的对象,可以执行类似$array['Index']->memberFunction()的操作;如果memberFunction返回了一个数组,您可以得到如下结果:
$Array['Index']->memberFunction()['ReturnedArrayIndex'];因为每次访问都会对其左边的对象的返回值进行操作


应该注意的是,像这样的大链是脆弱的,因为在任何一点上,如果某个东西在您期望的地方停止存在,您将得到一个无效的表达式。因此,最好避免编写上述代码,即使这对理解access的工作原理很重要。

除非(如您所示)索引是整数,否则在这种情况下,使用字符串对其进行寻址是不正确的。是这样吗?我的天啊,我太想把这个过程复杂化了,就像网上的大多数人一样,在一大堆复杂的代码示例中!非常感谢你,尼克,这是非常有用的,希望它能帮助其他人。是的,我想知道斯图尔特是从哪里得到“产品”的。我在回答中提到了这一点。@Stuart,你应该把这个标记为你问题的公认答案。如果您不将已接受的答案标记为已接受的答案,人们将停止在此网站上回答您的问题。@sholsinger
s/People/some People/
//将对象发送到函数以创建数组$Details=std\u class\u object\u to\u数组($xml);$count_乘积=0;foreach($Details['product']作为$Detail){$count_product++;@Stuart什么?我不知道你想在那里做什么。你不需要在
foreach
中使用计数器变量(如果需要,那么你应该使用
来代替
)。
// good:
$Details['product']

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