比较并从多维数组中删除

时间:2015-12-11 10:58:31

标签: php arrays multidimensional-array foreach

我有一个多维数组,如下所示:

array(2) {
  [0]=>
  array(8) {
    ["id"]=>
    string(3) "117"
    ["promotiontype_id"]=>
    string(1) "1"
    ["groupa_id"]=>
    string(3) "390"
    ["groupb_id"]=>
    string(3) "390"
    ["varx"]=>
    string(1) "2"
    ["vary"]=>
    string(1) "1"
    ["varz"]=>
    string(0) ""
    ["totaldiscount"]=>
    float(6.5)
  }
  [1]=>
  array(8) {
    ["id"]=>
    string(3) "117"
    ["promotiontype_id"]=>
    string(1) "1"
    ["groupa_id"]=>
    string(3) "390"
    ["groupb_id"]=>
    string(3) "390"
    ["varx"]=>
    string(1) "2"
    ["vary"]=>
    string(1) "1"
    ["varz"]=>
    string(0) ""
    ["totaldiscount"]=>
    float(7.0)
  }
}

因此,正如您将看到的,第一个数组的“totaldiscount”为6.5,第二个数组为7.0。

本质上,我需要删除包含最低值的数组,因此在这个实例中,将删除array [0],因为6.5具有最低的“totaldiscount”。该数组可以包含2个以上的子数组。

我认为这与预备通过有关,但我的大脑会因此而崩溃!

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

我将把你的问题分为两部分:

  

如何找到x的最低值?

function lowestX($array){
   $lowest = 999;
   for($array as $var){
      if($lowest > $var["totaldiscount"]){
         $lowest = $var["totaldiscount"];
      }
   }
}
  

如何从数组中删除值?

使用unssetfunction.array-splice

答案 1 :(得分:0)

一种可能的解决方案是使用usort按“totaldiscount”

对数组进行排序

然后从排序的数组中获取最低的“totaldiscount”值。

然后你可以循环排序的数组(如果有多个“totaldiscount”值具有相同的最低值)并使用数组键取消设置包含$lowestTotaldiscount的数组。

例如:

<?php
function cmp($a, $b)
{
    return ($a["totaldiscount"] < $b["totaldiscount"]) ? -1 : 1;
}

usort($arrays, "cmp");

$lowestTotaldiscount = $arrays[0]["totaldiscount"];

foreach($arrays as $key => $array) {
    if ($array["totaldiscount"] === $lowestTotaldiscount) {
        unset($arrays[$key]);
    }
}

Demo

答案 2 :(得分:0)

这里是您的问题的解决方案。只需使用array_multisort&amp;未设置如下。 `

$yourArray = array(
    array(
    "id"=>"117",
    "promotiontype_id"=>"1",
    "groupa_id"=>"390",
    "groupb_id"=> "390",
    "varx"=>"2",
    "vary"=>"1",
    "varz"=> "",
    "totaldiscount"=>8.5,
   ),
  array (
    "id"=> "117",
    "promotiontype_id"=>"1",
    "groupa_id"=>"390",
    "groupb_id"=>"390",
    "varx"=>"2",
    "vary"=>"1",
    "varz"=>"",
    "totaldiscount"=>7.0,
   ),
   array (
        "id"=> "117",
        "promotiontype_id"=>"1",
        "groupa_id"=>"390",
        "groupb_id"=>"390",
        "varx"=>"2",
        "vary"=>"1",
        "varz"=>"",
        "totaldiscount"=>9.0,   )
);
$discount = array();
foreach ($yourArray as $key => $row)
{
    $discount[$key] = $row['totaldiscount'];
}
array_multisort($discount, SORT_ASC, $yourArray);
unset($yourArray[0]);
print"<pre>";
print_r($yourArray);`