想要制作一个批次来创建Magento上的每周排名表


Want to make a batch to create a table of weekly ranking on Magento

我想像下面那样对这两个数组进行marge处理。而且花了这么长时间。。。你能帮帮我吗?

result=
array {
  [0]=>
  array{
    ["product_id"]=>"418"
    ["qty_ordered"]=>"2.0000"
  }
  [1]=>
  array{
    ["product_id"]=>"512"
    ["qty_ordered"]=>"3.0000"
  }
  [2]=>
  array{
    ["product_id"]=>"588"
    ["qty_ordered"]=>"1.0000"
  }
}
result1=
array {
  [0]=>
  array {
    ["id"]=>"2"
    ["period"]=>"2015-12-08"
    ["store_id"]=>"0"
    ["product_id"]=>"418"
    ["rating_pos"]=>"0"
    ["out_of_stock"]=>"1"
  }
  [1]=>
  array {
    ["id"]=>"4"
    ["period"]=>"2015-11-08"
    ["store_id"]=>"0"
    ["product_id"]=>"588"
    ["rating_pos"]=>"0"
    ["out_of_stock"]=>"0"
  }
}

那些数组是这样的(从下一个到上一个添加"out_of_stock")有很多数组需要marge,所以我想做一个foreach语句,但我已经被卡住了这么长时间。。。。

公共密钥是"product_id",如果$result1 中不存在公共product_id,则"out_of_stock"将为0

result2=
array {
  [0]=>
  array{
    ["product_id"]=>"418"
    ["qty_ordered"]=>"2.0000"
    ["out_of_stock"]=>"1"
  }
  [1]=>
  array{
    ["product_id"]=>"512"
    ["qty_ordered"]=>"3.0000"
    ["out_of_stock"]=>"0"
  }
  [2]=>
  array{
    ["product_id"]=>"588"
    ["qty_ordered"]=>"1.0000"
    ["out_of_stock"]=>"0"
  }
}

我创造了这样的东西,但我相信它会很长,一点也不好。。。

$rowArray=array();
        foreach($result as $rowArray){
            foreach ($rowArray as $column => $value) {
                if($colum = 'product_id'){
                .....

我真的很感激你的帮助。谢谢

我认为密钥是固定的,所以您不需要循环$rowArray

foreach($result as &$val1){
    $val1['out_of_stock'] = 0;//make it to be 0 as default
    foreach($result1 as $val2){
        if($val1['product_id'] == $val2['product_id']){
            $val1['out_of_stock'] = $val2['out_of_stock'];
            break;
        }
    }
}

您可以尝试以下操作:

$result = array_reduce($result, function ($return, $item) {
    $return[$item['product_id']] = $item;
    return $return;
}, array());
$result1 = array_reduce($result1, function ($return, $item) {
    $return[$item['product_id']] = $item;
    return $return;
}, array());
$result = array_replace_recursive($result, $result1);
$result = array_map(function($item) {
    $item['out_of_stock'] = isset($item['out_of_stock']) ? $item['out_of_stock'] : 0;
    return $item;
}, $result);
echo '<pre>';
var_dump($result);
echo '</pre>';