如何比较两个键和值并从数组中找到最大键值



我需要解决方案如何比较两个键和值并从数组中找到最大键值。

解释:- 我有以下数组,如果 urlcon 代码都相同,应该显示更高数量的数组,并且应该显示不匹配数据,请提供相同的解决方案。

$array = array( 
  array(
    "id" => 1, 
    "amount" => 10,
    "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia',
    "con" => array('US' =>array('id'=> '1','code'=>'US')),
    ),
    array( 
    "id" => 2, 
    "amount" => 3,
    "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia'  ,
    "con" => array('US' =>array('id'=> '1','code'=>'US')),  
    ),
     array( 
    "id" => 3, 
    "amount" => 19,
    "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia'  ,
    "con" => array('US' =>array('id'=> '1','code'=>'US'),'Uk' =>array('id'=> '2','code'=>'UK')),    
    ),  
    array( 
    "id" => 4, 
    "amount" => 50,
    "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia1111'  ,
    "con" => array('US' =>array('id'=> '1','code'=>'US'),'Uk' =>array('id'=> '2','code'=>'UK')),    
    ),            
); 

请检查我想要的结果在此示例中,ID 1 和 2 ID 具有相同的 URL 和国家/地区代码,因此从这两个中我们必须选择更高的金额,one.so 我们选择这个并且 ID 3 和 4 不符合此条件,因此它在此数组中将保持不变,因为 ID 3 具有相同的 url 但具有不同的国家/地区代码,ID 4 具有不同的 URL。

我想要这个结果。请提供相同的解决方案,提前感谢...!!

array(  "id" => 1, 
        "amount" => 10,
        "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia',
        "con" => array('US' =>array('id'=> '1','code'=>'US')),
        ),
 array( 
        "id" => 3, 
        "amount" => 19,
        "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia'  ,
        "con" => array('US' =>array('id'=> '1','code'=>'US'),'Uk' =>array('id'=> '2','code'=>'UK')),    
        ),  
 array( 
        "id" => 4, 
        "amount" => 50,
        "url" => 'https://play.google.com/store/apps/details?id=com.my.heroesofutopia1111'  ,
        "con" => array('US' =>array('id'=> '1','code'=>'US'),'Uk' =>array('id'=> '2','code'=>'UK')),    
        ), 

我的代码是

$output = [];
foreach($array as $data){   
       if(!isset($output[$data['url']]) ){          
            $output[$data['url']] = $data;
        }
        elseif( $output[$data['url']]['amount'] < $data['amount']){
            $output[$data['url']] = $data;
        }
    }
echo "<pre>"; print_r($output);
这是

正确答案

$output = array_reduce($array, function ($carry, $itemA) {
    return array_filter($carry, function ($itemB) use($itemA) {
        return ( 
            $itemB['url'] != $itemA['url']
            || $itemB['con'] != $itemA['con']
            || $itemB['amount'] >= $itemA['amount']
        );
    });
}, $array);

最新更新