PHP - 在关联数组中引用$ key值

时间:2014-03-21 00:53:36

标签: php xml arrays associative-array

$XMLproducts = simplexml_load_file("products.xml");

使用simplexml_load_file函数,我正在创建链接的关联数组,这些链接为下面的XML文件中的计算机提供硬盘空间。

foreach($XMLproducts->product as $Product) {
$hard_drive[$Product->harddrive] = "<a href='searchResults.php?Keyword=".$keyword."&Harddrive=".$Product->harddrive."'>".$Product->harddrive . "</a>";
}

对于每个循环,我需要在if语句中使用硬盘空间(IE 200,100等)的实际数值。如何在下面的foreach循环中引用数字量(在XML文件的'harddrive'元素中找到)。我认为最好的方法是使用下面的$ key变量。 foreach循环不输出任何东西 - 有或没有if语句。

foreach($hard_drive as $key => $value) {
if ($key == "200GB") { 
echo $key . " " . $value . "<br>";
}}

<products>

<product type="Desktop">
<name>Desktop 1</name>
<harddrive>200GB</harddrive>
</product>

<product type="Tablet">
<name>Ipad 1</name>
<harddrive>100GB</harddrive>
</product>

<product type="Desktop">
<name>Desktop 2</name>
<harddrive>200GB</harddrive>
</product>

<product type="Tablet">
<name>Ipad 2</name>
<harddrive>80GB</harddrive>
</product>

</products>

2 个答案:

答案 0 :(得分:0)

试试这个吗?

foreach($XMLproducts->product as $Product) {

    echo $Product->name." : ".$Product->harddrive;
    if($Product->harddrive == "100GB"){
        echo " ***";
    }
    echo "\n";
}

答案 1 :(得分:0)

有三件事需要改变 -

首先,我们需要将对象的属性转换为字符串,以使用它们作为数组中的键,使用(字符串)。

其次,您生成阵列的方式会覆盖两个硬盘驱动器具有相同容量的位置 - 它们将具有完全相同的密钥,从而擦除第一个200GB驱动器的数据。我们可以使用对象的名称作为键,并将容量和超链接存储在该数组元素中。

第三,只是一个样式决定,我重命名了数组$ hard_drives。

 foreach($XMLproducts->product as $Product) {
    $hd = (string)$Product->harddrive;
    $name = (string)$Product->name;
    $hard_drives[$name]['link'] = "<a href='searchResults.php?Keyword=".$keyword."&Harddrive=".$hd."'>".$hd . "</a>";
    $hard_drives[$name]['capacity'] = $hd;

}

    //echo '<pre>';
    //print_r($hard_drives);
    //echo '</pre>';

foreach($hard_drives as $key => $array) {
    if ($array['capacity'] == "200GB") { 
        echo $key . " " . $array['capacity'] . " " .$array['link']."<br>";
    }
}