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

Laravel-检查comepare值到数组中,并检查价格是否更高

  •  0
  • dwdawdawdaw  · 技术社区  · 6 年前

    我的刀片中有一些输入字段,如下所示:

    <input type="text" name="product[0][name]">
    <input type="text" name="product[0][price]">
    <input type="text" name="product[1][name]">
    <input type="text" name="product[1][price]">
    

    如果我提交表单,如果我dd(Input::get(“product”):

    MY PRODUCT ARRAY 
    
    array:2 [▼
      0 => array:2 [▼
        "name" => "unicorn"
        "price" => 5000
      ]
      1 => array:2 [▼
        "name" => "house"
        "price" => 10000
      ]
    ]
    

    现在我有了另一个数组,如下所示:

    API PRODUCT ARRAY
    
    array:80 [▼
      0 => array:18 [▼
        "name" => "john doe for sale"
        "price" => 120
        ...
      ]
      1 => array:18 [▼
        "name" => "house"
        "price" => 12000
        ..
      ]
      3 => array:18 [▼
        "name" => "unicorn"
        "price" => 5100
        ...
      ]
      4 => array:18 [▼
        "name" => "blabla"
        "price" => 60000
        ...
      ]
    

    现在我的问题

    我想检查“我的产品阵列”中是否有与“API产品阵列”中相同名称的产品

    如果是这种情况,那么应该检查“API产品阵列”中的一种产品的价格是否高于“我的产品阵列”。

    如果发生这种情况,则应将此产品添加到UserNotificationProducts数组中。

    我编写的代码看起来像这样,但根本不适用于我。 我需要帮助。

    foreach ($apiproducts as $key => $product)
    {
            if (in_array($product["name"], $myproducts["name"])) 
            {
                    if($product["price"] > (the current product of "myproducts")
                          array_push($productnotification, $product["name"]);
            }
    }
    

    “我的产品阵列”最多有三种产品。API产品阵列多达100个。

    谢谢


    我尝试了两种答案,并计算了两种解决方案的时间成本。

    Istiaque Ahmed的答案需要0.15902519226074 ms

    Hamelraj的答案(在你发布答案之前,我尝试了你所做的一切:D)需要0.031232833862305毫秒

    因此,哈梅尔拉吉的答案是更快的解决方案。谢谢你们两个!

    2 回复  |  直到 6 年前
        1
  •  1
  •   Hamelraj    6 年前
    $productnotification = [];
    foreach ($apiproducts as  $api)
    {   
        foreach ($myproduct as  $product)
        {
            if($product['name'] == $api['name'] && $api['price'] > $product['price'])
            array_push($productnotification, $product["name"]);
        }    
    }
    
        2
  •  1
  •   Istiaque Ahmed    6 年前

    你写的 if (in_array($product["name"], $myproducts["name"])) . 但是 $myproducts 是数组的数组。所以你没有从那里得到任何名字。以下代码可能会有所帮助:

    foreach ($apiproducts as $key => $product)
    {
        $product_name=$product["name"];
    
        for($i=0; $i<count($myproducts); $i++){
    
            if (strcasecmp($product_name,$myproducts[$i]['name']==0) ){
    
                if($product["price"] > (the current product of "myproducts")
                          array_push($productnotification, $product["name"]);
    
            }
    
        }// end of for loop
    
    }