繁体   English   中英

比较数组中的值并将其从数组中删除 - php

[英]compare values in array and delete it from array - php

大批:

[0] => Array
    (
        [0] => A
        [1] => 70H
        [2] => 51.57
        [3] => RH
    )

[1] => Array
    (
        [0] => B
        [1] => 70H
        [2] => 39.11
        [3] => RH
    )

[2] => Array
    (
        [0] => C
        [1] => 70H
        [2] => 12.11
        [3] => RH
    )

这只是一个数组的例子,我真正的数组真的很大。

我想在这样的数组中找到相同的值 [key][1],比较它们的价格,找到最低的 PRICE [KEY][2] 并为所有其他元素保存 [key][0],如果价格是相同然后随机保存一个为最低。 在示例中,我给出了我想要的结果:

[0] A
[1] B

我试过这段代码,但对我不起作用:

$res=array();
$Mfr= arrays_column($final_array, 1);
$dupes = array_diffs(array_count_values($Mfr), array(1)); // how many times a mfr sku appears 
print "\nThese are repetitive values:\n[mfrsku] => (number of reps)\n";
foreach($dupes as $key => $val){
    $temp = array_intersect_key(arrays_column($final_array, 3), $key); 
    if(count(array_unique($temp)) < count($temp)){

        $temp = array_intersect_key(arrays_column($final_array, 2), array_intersect($Mfr, array($key)));
        $temp = array_diffs($temp, array(min($temp)));
        $res[] = array_intersect_key(arrays_column($final_array, 0), $temp);
        print_r($res);die;
    }
}

您可以在第一次foreach循环中收集所有最小值,然后轻松收集具有其他值的记录:

声明数组

$minvals = [];     // array of minimum values
$spec = [];        // resultant array
$tmp = [];         // tmp array (needs for similar records)

第一个数组(收集最小值(价格)):

foreach($ar as $rec){
    $val = $rec[2];                       // price

    if(isset($minvals[$rec[1]] )) {       // next appearance of the same $rec[1]
        if ($minvals[$rec[1]] >= $val) { 
            $minvals[$rec[1]] = $val;   
        }
    } else {                              // first appearance 
        $minvals[$rec[1]] = $val;
    } 
}

现在您可以从第一列收集所需的值:

foreach($ar as $rec){
    if ($rec[2] > $minvals[$rec[1]]){           // if price is bigger than minimum  
        $spec[] = $rec[0];
    } else if($rec[2] == $minvals[$rec[1]]){    // if equal
        if(isset($tmp[$rec[1]])){               // if it appears at not the first time
            $spec[] = $rec[0];
        } else {
            $tmp[$rec[1]] = 1;
        }
    }
}

在输入数组的情况下,如:

$ar = [ ["A","70H","51.57","RH"],
        ["B","70H","39.11","RH"],
        ["C","70H","12.11","RH"],

        ["A2","71H","11.57","RH"],
        ["B2","71H","32.11","RH"],

        ["C2","73H","12.11","RH"], 
        ["C3","73H","11.11","RH"], 
        ["C4","73H","33.11","RH"],  
        ["C5","73H","3.11","RH"],  
        ["C6","73H","3.11","RH"],         
      ];

输出将是下一个:

Array
(
    [0] => A
    [1] => B
    [2] => B2
    [3] => C2
    [4] => C3
    [5] => C4
    [6] => C6
)

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM