2016-06-14 6 views
-1

私は、キー=>値の最大値を探したいが、重複する特定のキーのみを探し、その最大値で新しいキー=>値を作成する多次元配列を持っています。PHP多次元配列が重複の最大値を見つける

それは私が重複した「ID」とmax'level」の値を見つけるに見てきたが、私がすることができていませんでした最初の配列と予想される結果

$data = array(
0 => array('id' => '1a','info'=>'abc','level'=>1), 
1 => array('id' => '1a','info'=>'xyz','level'=>3), 
2 => array('id' => '2b','info'=>'uvw','level'=>2), 
3 => array('id' => '3c','info'=>'str','level'=>1), 
4 => array('id' => '3c','info'=>'str2','level'=>2), 
5 => array('id' => '4d','info'=>'uvw1','level'=>1), 
); 



$result = array(
    0 => array('id' => '1a','info'=>'abc','level'=>1,'max_level'=>3), 
    1 => array('id' => '1a','info'=>'xyz','level'=>3,'max_level'=>3), 
    2 => array('id' => '2b','info'=>'uvw','level'=>2,'max_level'=>2), 
    3 => array('id' => '3c','info'=>'str','level'=>1,'max_level'=>2), 
    4 => array('id' => '3c','info'=>'str2','level'=>2,'max_level'=>2), 
    5 => array('id' => '4d','info'=>'uvw1','level'=>1,'max_level'=>1), 
); 

を示すことによって説明する方が簡単です2つを組み合わせて、重複しないようにしてください。

+0

ので、あなたは何を試してみましたが? –

答えて

0

だから、あなたのタスクは、二つの部分に分かれています

// first - find maximum level of every `id` 
$max_values = array(); 
foreach ($data as $v) { 
    if (!isset($max_values[$v['id']]) || $max_values[$v['id']] < $v['level']) { 
     $max_values[$v['id']] = $v['level']; 
    } 
} 

// second - add this level to $data 
foreach ($data as &$v) { 
    $v['max_level'] = $max_values[$v['id']]; 
} 
1

array_walkmax機能使用したソリューション:

array_walk($data, function($v) use(&$max_levels){ $max_levels[$v['id']][] = $v['level']; }); 
foreach ($data as &$v) { 
    $v['max_level'] = max($max_levels[$v['id']]);  
} 

print_r($data); 

https://eval.in/588966

+0

ありがとうございます!それは私が立ち往生していたarray_walkビットでした。 – NorthSide

+0

@NorthSide、あなたは大歓迎です – RomanPerekhrest

関連する問題