代码之家  ›  专栏  ›  技术社区  ›  raptorandy

如何直接使用PHP或SQL透视动态数组?[副本]

  •  -1
  • raptorandy  · 技术社区  · 7 年前

    我有以下PHP数组。它存储特定商品的信息、商店id和该商店的价格。该数组将是动态的,因此稍后将添加更多的store\u id。

    array (size=6)
    0 => 
        array (size=3)
          'item_id' => '1'
          'store_id' => '1'
          'price' => '74.99'
    1 => 
        array (size=3)
          'item_id' => '2' 
          'store_id' => '1' 
          'price' => '35.99' 
    2 => 
        array (size=3)
          'item_id' => '3' 
          'store_id' => '1' 
          'price' => '89.99' 
    3 => 
        array (size=3)
          'item_id' => '1' 
          'store_id' => '2' 
          'price' => '69.99'
    4 => 
        array (size=3)
          'item_id' => '2'
          'store_id' => '2'
          'price' => '39.99'
    5 => 
        array (size=3)
          'item_id' => '3'
          'store_id' => '2'
          'price' => '95.99' 
    

    这是我想要得到的结果,我想根据item\u id对它们进行分组,并存储每个商店中每个商品的每个价格。所有商品将在所有store\u ID中可用。

    array (size=3)
    0 => 
        array (size=3)
          'item_id' => '1'
          (price for store_id 1) => '74.99'
          (price for store_id 2) => '69.99'
    1 => 
        array (size=3)
          'item_id' => '2' 
          (price for store_id 1) => '35.99'
          (price for store_id 2) => '39.99'
    2 => 
        array (size=3)
          'item_id' => '3' 
          (price for store_id 1) => '89.99'
          (price for store_id 2) => '95.99'
    

    我试图直接从查询中执行此操作,但我使用的是mysql,没有找到解决方案。 我知道我需要遍历数组,但我不知道实现这一点所需的过程。感谢您的帮助或建议。谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   FirstOne    7 年前

    不是最佳或最优化的代码,但给出了预期结果:

    //$arr = ...
    $output = array();
    foreach($arr as $item){
        if(in_array($item['item_id'], array_column($output, 'item_id'))){
            // add store to already existing item
            $key = array_search($item['item_id'], array_column($arr, 'item_id'));
            $output[$key]['store_id_' . $item['store_id']] = $item['price'];
        }else{
            // add new item with store
            $tmp = array(
                'item_id' => $item['item_id'],
                'store_id_' . $item['store_id'] => $item['price'],
            );
            $output[] = $tmp;
        }
    }
    

    你可以 check it out .