【问题标题】:Multidimensional Arrays enquiry PHP多维数组查询 PHP
【发布时间】:2015-02-05 19:02:45
【问题描述】:

例如我有如下数组:

Array 
(
   [0] => Array
     (
        [a] => 1
        [b] => 0
        [c] => 1
        [d] => 1     
     )
    [1] => Array
    (
        [a] => 2
        [b] => 0
        [c] => 3
        [d] => 3 
    )
    [4] => Array
    (
        [a] => 5
        [b] => 1
        [c] => 3
        [d] => 2 
    )    

)

现在我想只接收具有最大 [d] 值的数组。 所以在这种情况下:

Array (
        [a] => 2
        [b] => 0
        [c] => 3
        [d] => 3
    )  

什么是最简单和最优化的方法? 谢谢!

【问题讨论】:

  • 你有什么尝试吗?钥匙没问题? a b d d 应该是 a b c d?

标签: php arrays multidimensional-array array-key


【解决方案1】:
$res=array();
    foreach ($array as $temp)
    {
        foreach ($temp as $k=>$value)
        {
            if(!isset($res[$k]))
            {
                $res[$k]=$value;
            }
            else
            {
                $res[$k]=max($value,$res[$k]);
            }
        }
    }
    print_r($res);

输出数组([a] => 5 [b] => 1 [c] => 3 [d] => 3)

更新答案

$res=array();
    $max=0;
    foreach ($array as $temp)
    {
        if($max<$temp['d'])
        {
             $max=$temp['d'];
            $res=$temp;
        }
    }
    print_r($res);

输出数组([a] => 2 [b] => 0 [c] => 3 [d] => 3)

【讨论】:

  • 我不是这个意思。如果数组看起来像: '$array = Array ( 0 => Array ( "a" => "1", "b" => "0", "c" => "1", "d" => " 1" ), 1 => 数组 ( "a" => "1", "b" => "5", "c" => "1", "d" => "2" ), 4 => 数组(“a”=>“1”,“b”=>“0”,“c”=>“1”,“d”=>“3”));'输出为: Array ( [a] => 1 [b] => 5 [c] => 1 [d] => 3 ) 但我想收到:Array ( [a] => 1 [b] => 0 [c] => 1 [d] => 3)
  • 完美!非常感谢:)
  • @gemmi 很高兴这有帮助。
【解决方案2】:
$array = Array 
(
   [0] => Array
     (
        [a] => 1
        [b] => 0
        [c] => 1
        [d] => 1     
     )
    [1] => Array
    (
        [a] => 2
        [b] => 0
        [c] => 3
        [d] => 3 
    )
    [4] => Array
    (
        [a] => 5
        [b] => 1
        [c] => 3
        [d] => 2 
    ));

    uasort ( $array, function ($a, $b) {
            return $a['d'] > $b['d'];
        }
    );

$valueYouAreSearchingFor = $array[0];

我使用 uasort 使用匿名函数对数组进行排序。我必须测试它是否比 ForEach 循环更快,但它肯定更有趣(至少如果你问我:))

如果不想改变原来的数组,就复制一份,对副本进行排序。

PS:Google 是你的朋友...

【讨论】:

  • 我会在任何一天都采用这种简洁的方法而不是接受的答案,而不管任何边际性能提升。
【解决方案3】:
$subArray1 = array('a' => 1, 'b' => 0, 'c' => 1, 'd' => 1);
$subArray2 = array('a' => 2, 'b' => 0, 'c' => 3, 'd' => 3);
$subArray3 = array('a' => 5, 'b' => 1, 'c' => 3, 'd' => 2);
$data = array($subArray1, $subArray2, $subArray3);

$resultArray = array();
/*
Turn off 'notification' level errors or add 'isset' checks
*/
foreach($data as $subArray)
{
    foreach($subArray as $key => $value)
    {
        $resultArray[$key] = max($resultArray[$key], $value);
    }
}
var_dump($resultArray);

【讨论】:

  • 您的结果是 Array ( [a] => 5 [b] => 1 [c] => 3 [d] => 3 ),而不是 Array ( [a] => 2 [b ] => 0 [c] => 3 [d] => 3),
猜你喜欢
  • 2015-04-30
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2014-04-08
  • 2017-06-14
  • 1970-01-01
  • 2016-12-07
相关资源
最近更新 更多