2015-02-06 3 views
2

의 최소/최대를 찾기 :I는 다음과 같은 형식의 배열이 이차원 배열

Array 
(
    [0] => Array 
     (
      [DateTime] => "2013-05-22 14:21:01" 
      [Price] => 102.01 
     ) 
    [1] => Array 
     (
      [DateTime] => "2013-05-23 15:55:01" 
      [Price] => 52.60 
     ) 
    [2] => Array 
     (
      [DateTime] => "2013-05-25 14:23:01" 
      [Price] => 452.25 
     ) 
    ... etc 
) 

내가 Price의 최소값 및 최대 값을 발견해야한다.

min은 키만 반환합니다. 또한 max(array_map("max", $data))을 시도했지만 그 경우에만 452.25을 반환합니다.

foreach을 수동으로 사용해야합니까?

$min = min(array_column($array, 'Price')); 
$max = max(array_column($array, 'Price')); 

이 최소 및 최대의 중첩 된 배열을 반환하려면 :

$prices = array_column($array, 'Price'); 
$min_array = $array[array_search(min($prices), $prices)]; 
$max_array = $array[array_search(max($prices), $prices)]; 

그리고 그 이후로 한 줄에 각을 할 수

+1

'max (array_column ($ data, 'Price'))'는 최고의 가격을 제공하지만 관련 DateTime을 가져올 수 없습니다. – mpen

+0

예상되는 결과는 무엇입니까? – qtuan

+0

나는 실제 가격이 필요합니다. 어떤 것과도 연관 될 필요가 없습니다. –

답변

8

여기에 최소 및 최대 값을 얻기 위해 하나의 방법입니다

$min_array = $array[array_search(min($prices = array_column($array, 'Price')), $prices)]; 
$max_array = $array[array_search(max($prices = array_column($array, 'Price')), $prices)]; 

PHP> = 5.5.0 array_column()에 필요한 : 당신이해야 할 트링 있었는지처럼 보였다 또는 PHP Implementation of array_column()을 사용하십시오.

$min = min(array_map(function($a) { return $a['Price']; }, $array)); 
$max = max(array_map(function($a) { return $a['Price']; }, $array)); 

좋은 array_filter() 또는 array_reduce()뿐만 아니라 아마있다 : 단지 최소 및 최대를 얻기 위해 단지 array_map()를 사용

.

+0

멋진데! 이제 PHP 5.5를 실행하기 위해 EC2 인스턴스를 가져 오는 방법을 알아야합니다.) (또는 내가 링크 된 구현을 방금 얻었습니다.) –

+0

대안을 추가했습니다. – AbraCadaver

0

나는 가장 좋은 방법은 (쉬운 방법) 귀하의 배열에서 모든 가격을 얻고 별도의 배열에 저장하는 것 같아요.

그런 다음 새 배열에서 최대 값을 추출합니다.

$myarray = array (array("DateTime" => "2013-05-22 14:21:01", "Price" => 102.01), 
        array("DateTime" => "2013-05-23 15:55:01", "Price" => 52.60), 
        array("DateTime" => "2013-05-25 14:23:01", "Price" => 452.25) 
       ); 

//$key is index of $myarray and $value is one of subarrays 
//declare a new array to store all prices 

$all_price = array(); 

foreach ($myarray as $key => $value) 
{ 
    //get only "Price" from each row of array (discard "DateTime") 
    $all_price[] = $value["Price"]; 

} 

//$all_price cointains now all prices and you can get min and max 

$min = min($all_price); 
$max = max($all_price); 

echo("Min: ".$min."<br />"); 
echo("Max: ".$max."<br />"); 

복사를하고 결과를 볼 수 http://www.writephponline.com/ 에이 코드를 붙여 넣습니다

이보십시오! : D PHP에서도

서지 미만 5.5.0

+0

나는 그 질문을 잘못 읽었 기 때문에 나의 대답을 편집했다. 이 솔루션은 테스트를 거쳤으며 매우 간단합니다.PHP 테스터에서 시험해 볼 수 있습니다. 내가 남긴 링크. – Yeti82

0

I은 ​​array_reduce()

$a[]=array('name'=>'kokopiko','price'=>34); 
$a[]=array('name'=>'kokospiko2','price'=>234); 
$a[]=array('name'=>'kokospiko3','price'=>4); 

$minmax = array_reduce($a, function($result, $item) { 

    if (!isset($result['min'])) { 
     $result['min']=$item; 
    } 
    if ($result['min']['price'] > $item['price']) { 
     $result['min']=$item; 
    } 

    if (!isset($result['max'])) { 
     $result['max']=$item; 
    } 
    if ($result['max']['price'] < $item['price']) { 
     $result['max']=$item; 
    } 
    return $result; 
}); 

var_dump($minmax); 

짧은 버전

$a[]=array('name'=>'kokopiko','price'=>34); 
$a[]=array('name'=>'kokospiko2','price'=>234); 
$a[]=array('name'=>'kokospiko3','price'=>4); 

$init=array('min'=>$a[0],'max'=>$a[0]); 

$minmax = array_reduce($a, function($result, $item) { 
    ($result['min']['price'] < $item['price'])?:$result['min']=$item; 
    ($result['max']['price'] > $item['price'])?:$result['max']=$item; 
    return $result; 
}, $init); 

만 최소/최대 값을 사용하려면 (연결되지 않은 배열 요소

$min= array_reduce($a, function($result, $item) {return min($result, $item['price']);}, $a[0]['price']); 
$max= array_reduce($a, function($result, $item) {return max($result, $item['price']);}, $a[0]['price']); 
+0

나는 누군가가 하나 올리길 바랬지 만, 그게 많은 코드입니다. – AbraCadaver

+0

나는 그것을 더 분명하게하고 싶었다. :) 나는 짧은 버전을 추가 할 것이다. – user3085707