php zencart mod - 属性数组有问题

时间:2010-04-21 05:33:40

标签: php arrays

我继承了zencart mod并且无法弄清楚出了什么问题。客户选择产品和属性(型号#)。然后将其发送到他们完成的另一个表单。提交表单时,产品和属性应包含在发送的电子邮件中。

此时,只有产品才会通过。该属性只是说“数组”。有趣的是,当我删除打印属性的行时,products_options_names将打印出来。所以我知道产品和products_options_names都在工作。该属性是唯一不能正常工作的东西。

以下是我认为重要的代码。这是具有表单的页面,因此该属性应该已经传递给表单。

//Begin Adding of New features
//$productsimage = $product['productsImage'];
$productsname = $product['productsName'];
$attributes = $product['attributes'];
$products_options_name = $value['products_options_name'];

$arr_product_list[] = "<strong>Product Name:</strong> $productsname <br />";
$arr_product_list[] .= "<strong>Attributes:</strong> $attributes <br />";
$arr_product_list[] .= "<strong>Products Options Name:</strong> $products_options_name  <br />";
$arr_product_list[] .=  "---------------------------------------------------------------";

//End  Adding of New features

  } // end foreach ($productArray as $product)
?>

在此之上,还有另一个具有属性的部分:

 <?php
   echo $product['attributeHiddenField'];
   if (isset($product['attributes']) && is_array($product['attributes'])) {
   echo '<div class="cartAttribsList">';
    echo '<ul>';
    reset($product['attributes']);
    foreach ($product['attributes'] as $option => $value) {
?>

任何人都可以帮我弄清楚出了什么问题吗?我不确定此页面上是否存在问题,或者该属性是否未传递到此页面。

TIA

2 个答案:

答案 0 :(得分:1)

您的第一个代码段包含潜在问题。您正在尝试使用字符串连接$arr_product_list运算符,同时向数组.=添加新项。当然,这会让PHP感到困惑,因为您正在尝试添加一个尚不存在的字符串。

我相信您的代码的目的是构建一个HTML代码段,然后将其添加到数组中,您可以使用以下代码:

$str = "<strong>Product Name:</strong> $productsname <br />";
$str .= "<strong>Attributes:</strong> $attributes <br />";
$str .= "<strong>Products Options Name:</strong> $products_options_name  <br />";
$str .=  "---------------------------------------------------------------";
$arr_product_list[] = $str;

你很可能从PHP那里得到错误,但也许他们被压制了。仔细检查您的php.ini,确保您的error_reportingdisplay_errorsdisplay_startup_errorslog_errors设置正确无误。

答案 1 :(得分:0)

我意识到这可能为时已晚,无法帮助解决这一特定问题,但我正在回答,希望其他人在这篇文章中遇到类似问题。

您看到“阵列”打印出来的原因是因为存储在$ products中且带有键'attributes'的值实际上是一个数组。 $ product ['attributes']中的值是一个数组类型,您将其存储到$ attributes中。这意味着$ attributes变量是一个数组,所以当你尝试将它连接到这一行时:

$arr_product_list[] .= "<strong>Attributes:</strong> $attributes <br />";

解释器不知道如何序列化Array对象,因此默认打印出对象的类型,我们已经确定它是一个数组。

如果您关心的$ attributes数组中只有一个值,您可能希望在构建字符串之前收集该值,如下所示:

var $attributes = $products['attributes']; 
var $attributeValue = $attributes['my_target_value_key'];

**(其中'my_target_value_key'是您希望提取的值的关键字)*

然后你可以像以前一样尝试它,只需用$ attributeValue替换字符串中的$ attributes。

第二个代码块有效,因为您可以看到它检查值是否已设置且是否为此行的数组类型:

 if (isset($product['attributes']) && is_array($product['attributes'])) {

然后使用以下行循环遍历返回数组中的每个项目:

 foreach ($product['attributes'] as $option => $value) {