PHP многомерный массив с логическими аргументами (некоторые искажения мозга) - PullRequest
1 голос
/ 07 мая 2011

Проблема: У меня есть переменные из magento, которые хранятся в классе модели и могут быть получены как

$productArray[] = array();
foreach ($order->getAllItems() as $item) {
    $productArray[] = array(
        "product"  => $item->getName(),
        "qty"   => $item->getQtyOrdered(),
        "amount" => $item->getPrice(),
    );
}

Это значения, если print_r $ productArray []: Пример вывода 1:

array(1) {
  [0]=>
  array(3) {
    ["product_name"]=>
    string(12) "Test Product"
    ["product_qty"]=>
    string(6) "2.0000"
    ["product_price"]=>
    string(7) "12.0000"
  }
}

Пример вывода 2:

array(2) {
  [0]=>
  array(3) {
    ["product_name"]=>
    string(12) "Test Product"
    ["product_qty"]=>
    string(6) "2.0000"
    ["product_price"]=>
    string(7) "12.0000"
  }
  [1]=>
  array(3) {
    ["product_name"]=>
    string(6) "Test 2"
    ["product_qty"]=>
    string(6) "5.0000"
    ["product_price"]=>
    string(7) "22.0000"
  }
}

И как вы можете сделать это так? (Должно быть напечатано так) Если вывод 1: конечный вывод 1

<input type="hidden" name="product" value="Test Product" />
<input type="hidden" name="amount" value="24.00" />

Если вывод 2: окончательный вывод 2

<input type="hidden" name="product1" value="Test Product" />
<input type="hidden" name="amount1" value="24.00" />
<input type="hidden" name="product2" value="Test 2" />
<input type="hidden" name="amount2" value="110.00" />

Значение сумму будет получено в product_price * product_qty .

Повеселитесь :) Это всего лишь фиктивная проблема, но она может быть полезна другим

Ответы [ 3 ]

2 голосов
/ 07 мая 2011

Вот так:

<?php
foreach($productArray as $i => $product){
  $index = count($productArray) == 1 ? "" : $i; //So we don't have index when only 1 element
  $amount = $product['product_price'] * $product["product_qty"];
  $name = $product['product_name'];
?>
  <input type="hidden" name="product<?php echo $index; ?>" value="<?php echo $name;?>" />
  <input type="hidden" name="amount<?php echo $index;?>" value="<?php echo $amount;?>" />
<?php
}
?>

Надеюсь, это поможет.Приветствия

1 голос
/ 07 мая 2011

не уверен насчет magento, но в обычном php это будет:

<?php
  $productArray = array(
    array(
      "product_name" => "Test Product",
      "product_qty" => "2.0000",
      "product_price" => "12.0000"
),
    array(
  "product_name"=> "Test 2",
      "product_qty"=>"5.0000",
      "product_price"=>"22.0000"
    )
  );

  foreach($productArray as $v) {
    echo '<input type="hidden" name="product" value="'.$v["product_name"].'" />';
    echo '<input type="hidden" name="amount" value="'.($v["product_qty"]*$v["product_price"]).'" />';
  }
?>
0 голосов
/ 07 мая 2011

При создании массивов полей формы в php используйте «product [$ id]» в качестве имени, тогда php извергнет аккуратный массив в $ _POST. Вы даже можете сделать name = "product [$ id] [price]", и вы получите 2D-массив.

Обратите внимание, что если ваш интернет-магазин доверяет скрытым данным формы, чтобы перемещаться по корзине во время оформления заказа (как вы, похоже, делаете), у вас есть зияющая дыра в безопасности, поэтому, пожалуйста, опубликуйте веб-адрес, я бы хотел заказать материал бесплатно!

...