PHP在foreach

时间:2016-12-01 14:59:54

标签: php arrays

我是非常新的PHP,因为我在寻找最近2个小时的信息,没有任何例子似乎有帮助。 我有什么我认为被称为嵌套数组?他们两个人。我几乎需要能够匹配来自不同阵列的id。减少库存量。

<?php
$items = array(
array('id' => 34, 'name' => 'Kompiuterius ASUS ASX89', 'price' => 639.00, 'stock' => 3),
array('id' => 1008, 'name' => 'Monitorius AOC 27IPS', 'price' => 223.00, 'stock' => 7),
array('id' => 965, 'name' => 'Tracer kilimėlis pelytei', 'price' => 2.00, 'stock' => 20),
array('id' => 567, 'name' => 'Pelytė Logitech A52', 'price' => 16.00, 'stock' => 14),
array('id' => 1123, 'name' => 'Klaviatūra Razer Chroma 2016', 'price' => 109.00, 'stock' => 6)
);
$orders = array(
array('purchase_date' => '2016-11-12', 'item_id' => 34, 'quantity' => 1),
array('purchase_date' => '2016-11-12', 'item_id' => 1008, 'quantity' => 2),
array('purchase_date' => '2016-11-13', 'item_id' => 965, 'quantity' => 1),
array('purchase_date' => '2016-11-15', 'item_id' => 1123, 'quantity' => 4),
array('purchase_date' => '2016-11-11', 'item_id' => 34, 'quantity' => 2)
);

foreach ($orders as $order){
  $purchase_id = $order['item_id'];
  $purchase_quantity = $order['quantity'];
  foreach ($items as $item){
    $stock_id = $item['id'];
    $stock_quantity = $item['stock'];
    if ($purchase_id == $stock_id){
      $stock_quantity = $stock_quantity - $purchase_quantity;
      $item['stock'] = $stock_quantity; //something with &?
      echo 'Prekiu, pazymetu numeriu ' . $stock_id . ' liko: ' . $stock_quantity . ' vnt. ' . '<br/>';
    }
  }
}
?>

那就是我的代码。我认为这可能有用,就像下面的一行我会在退出之前为股票赋予新的价值&#34;如果&#34;功能。但我想我错了

$item['stock'] = $stock_quantity;

欢迎任何建议

EDIT1:我想要做的是将$ items数组中的id与来自$ orders的id进行比较。如果它与库存减去数量匹配并显示剩余库存。希望它更清楚

3 个答案:

答案 0 :(得分:1)

如果您将foreach ($items as $item)更改为foreach ($items as &$item),则会更改$ item。在变量之前添加&将使其成为引用而不是新对象。这样,当您更改项目时,它将更改原始项目。

答案 1 :(得分:1)

foreach循环的工作原理是将每个值复制到临时变量中。

如果要编辑原始阵列,可以使用两种解决方案:

使用引用传递值,使用&

foreach ($items as &$item) {
    /*...*/
    $item['stock'] = $stock_quantity;
}

或使用$key=>$value表示法并编辑原始数组:

foreach ($items as $key => $item) {
    /*...*/
    $items[$key]['stock'] = $stock_quantity;
}

答案 2 :(得分:1)


  entryComponents: [ AdditionCalculateWindow ]

如果您需要操作当前元素,请务必在$items = array( array('id' => 34, 'name' => 'Kompiuterius ASUS ASX89', 'price' => 639.00, 'stock' => 3), array('id' => 1008, 'name' => 'Monitorius AOC 27IPS', 'price' => 223.00, 'stock' => 7), array('id' => 965, 'name' => 'Tracer kilimėlis pelytei', 'price' => 2.00, 'stock' => 20), array('id' => 567, 'name' => 'Pelytė Logitech A52', 'price' => 16.00, 'stock' => 14), array('id' => 1123, 'name' => 'Klaviatūra Razer Chroma 2016', 'price' => 109.00, 'stock' => 6) ); $orders = array( array('purchase_date' => '2016-11-12', 'item_id' => 34, 'quantity' => 1), array('purchase_date' => '2016-11-12', 'item_id' => 1008, 'quantity' => 2), array('purchase_date' => '2016-11-13', 'item_id' => 965, 'quantity' => 1), array('purchase_date' => '2016-11-15', 'item_id' => 1123, 'quantity' => 4), array('purchase_date' => '2016-11-11', 'item_id' => 34, 'quantity' => 2) ); foreach ($orders as $order){ $purchase_id = $order['item_id']; $purchase_quantity = $order['quantity']; foreach ($items as &$item){ $stock_id = $item['id']; $stock_quantity = $item['stock']; if ($purchase_id == $stock_id) { $stock_quantity = $stock_quantity - $purchase_quantity; $item['stock'] = $stock_quantity; echo 'Prekiu, pazymetu numeriu ' . $stock_id . ' liko: ' . $stock_quantity . ' vnt. ' . '<br/>'; } unset($item); } } 的临时变量之前添加引用&

完成foreach循环后,使用foreach函数删除临时变量的引用。

因此,变量将被销毁,否则它仍然可以在unset()之外访问,因为它仍然是引用变量。

有关此内容的更多信息,请参阅以下帖子:

Strange behavior Of foreach