2016-01-14 113 views
1

我想从不同阵列获取最大值。基本上,阵列从3个不同的网站填充,我需要知道每个产品的最大值tagsphotos值。从不同阵列获取最大值

我有以下阵列:

$data = array(
    'domain1.com' => array(
     'id1' => array(
      'tags' => '5', 
      'photos' => '4', 
     ), 
     'id2' => array(
      'tags' => '8', 
      'photos' => '2', 
     ), 
     'id3' => array(
      'tags' => '6', 
      'photos' => '1', 
     ), 
    ), 
    'domain2.com' => array(
     'id1' => array(
      'tags' => '3', 
      'photos' => '1', 
     ), 
     'id2' => array(
      'tags' => '4', 
      'photos' => '9', 
     ), 
     'id3' => array(
      'tags' => '2', 
      'photos' => '0', 
     ), 
    ), 
    'domain3.com' => array(
     'id1' => array(
      'tags' => '7', 
      'photos' => '3', 
     ), 
     'id2' => array(
      'tags' => '9', 
      'photos' => '5', 
     ), 
     'id3' => array(
      'tags' => '2', 
      'photos' => '4', 
     ), 
    ), 
); 

我需要得到以下结果:

$data = array(
    'id1' => array(
     'tags' => '7', 
     'photos' => '4', 
    ), 
    'id2' => array(
     'tags' => '9', 
     'photos' => '9', 
    ), 
    'id3' => array(
     'tags' => '6', 
     'photos' => '4', 
    ), 
); 
+2

这是伟大的,所以你尝试过什么? – Darren

+0

我试过'array_merge'和'array_combine',但它似乎并不是我需要[从php.net取得]的那个。 –

+0

当然,非常感谢,它的工作! :-) –

回答

0

这是solveable用一个简单的循环:

$new = array(); 

foreach($data as $domain){ 
    foreach($domain as $id => $_data){ 
     foreach($_data as $elem => $value) { 
      if(!isset($new[$id][$elem]) || $value > $new[$id][$elem]){ 
       $new[$id][$elem] = $value; 
      } 
     } 
    }  
} 

将返回:

Array 
(
    [id1] => Array 
     (
      [tags] => 7 
      [photos] => 4 
     ) 

    [id2] => Array 
     (
      [tags] => 9 
      [photos] => 9 
     ) 

    [id3] => Array 
     (
      [tags] => 6 
      [photos] => 4 
     ) 

) 

Example

+0

其实,这是最简单的方法!而且更快,我刚刚测试过它。我会用你的,谢谢! –

0

最简单的方法是使用嵌套的foreach循环遍历并捕获数据。如果在结果数组中找到更高的值,结果将被更新。

$results = []; 
foreach ($data as $domain => $items) { 
    foreach ($items as $id => $elements) { 
     if (!isset($results[ $id ])) { 
      $results[ $id ] = []; 
     } 
     foreach ($elements as $tag => $value) { 
      if (!isset($results[ $id ][ $tag ]) || $value>$results[ $id ][ $tag ]) { 
       $results[ $id ][ $tag ] = $value; 
      } 
     } 
    } 
} 

print_r($results);