0

I have a multidimensional array looking like this:

Array
(
    [0] => Array
        (
            [name] => name1
            [sha1] => sha1
            [size] => 693989968
        )

    [1] => Array
        (
            [name] => name1
            [sha1] => sha2
            [size] => 757204238
        )

    [2] => Array
        (
            [name] => name2
            [sha1] => sha3
            [size] => 1068277922
        )

    [3] => Array
        (
            [name] => name3
            [sha1] => sha4
            [size] => 996843467
        )

The return of the wanted function should be sha2,sha3,sha4; when a name is in there more than once, the higher size should be kept.

I tried for some hours now, using asort, splitting into multiple array (for name,sha and size) but none have worked until now.

Jan Allen
  • 3
  • 1

1 Answers1

0
$output_array=array();
$a = array(
 array(
   "name" => "name1",
   "sha1" => "sha1",
   "size" => 693989968
 ),
 array(
   "name" => "name1",
   "sha1" => "sha2",
   "size" => 757204238
 ),
 array(
   "name" => "name2",
   "sha1" => "sha3",
   "size" => 1068277922
 ),
 array(
   "name" => "name3",
   "sha1" => "sha4",
   "size" => 996843467
 )
);
foreach($a as $item){
  //item to check
  $item_tc = @$output_array[$item['name']]; //names with empty string will be discarded
  //by using @ to suppress errors.
  if($item_tc){
      print($item['size'].'n');
      print($item_tc['size']);
      if($item['size'] > $item_tc['size']){
           $output_array[$item['name']] = $item;
              //print_r($item);

       }
    }else{
      $output_array[$item['name']] = $item; 
    }
}
print_r($output_array);

The output is:

Array (
  [name1] => Array ( 
    [name] => name1 
    [sha1] => sha2 
    [size] => 757204238 
   ) 
   [name2] => Array (
    [name] => name2 
    [sha1] => sha3 
    [size] => 1068277922 
  ) 
  [name3] => Array ( 
    [name] => name3 
    [sha1] => sha4 
    [size] => 996843467 
  ) 
)
Marko Mackic
  • 2,293
  • 1
  • 10
  • 19