【问题标题】:PHP - referencing a $key value in an associative arrayPHP - 在关联数组中引用 $key 值
【发布时间】:2014-04-28 04:42:11
【问题描述】:
$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 文件的“硬盘”元素中找到)。我认为最好的方法是使用下面的 $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>

【问题讨论】:

  • 您能否编辑您的问题以更清楚地说明您的目标是什么?也许显示您的foreach 循环正在输出什么,并具体指出您不满意的部分。例如,我想您可能会问如何从“100GB”中获取“100”,但我不确定。
  • foreach 循环没有输出任何东西
  • 如果你 var_dump($hard_drive); 你会得到什么?
  • print_r 产品:数组 ( )

标签: php xml arrays associative-array


【解决方案1】:

试试这个?

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

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

【讨论】:

  • 我需要显示来自 $hard_drive 的链接
【解决方案2】:

要改变三件事 -

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

其次,您生成阵列的方式将覆盖两个具有相同容量的硬盘驱动器 - 它们将具有完全相同的密钥,从而擦除第一个 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>";
    }
}

【讨论】:

    猜你喜欢
    • 2015-01-22
    • 1970-01-01
    • 2012-08-31
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多