[英]Find the maximum and parent value in an array
我搜索了很多線程,但是找不到這個解決方案,我有這個數組
Array
( [0] => [1] => Array ( [0] => 2019-01-11T23:30:00CET [1] => -12.6 ) [2] => [3] => Array ( [0] => 2019-01-11T23:20:00CET [1] => -12.5 ) [4] => [5] => Array ( [0] => 2019-01-11T23:10:00CET [1] => -12.6 ) [10] => [11] => Array ( [0] => 2019-01-11T22:40:00CET [1] => -12.4 )
我發現此數組具有最大值或最小值(列[1]),但我需要找到相對的Parent
(例如,最低-12.6在[1] [0]中作為2019-01-11T22:20:00CET)在第一列(Column [0])中顯示的這兩個值
謝謝
如果使用array_column()
提取數據的第二列,則可以對該數組使用min()
或max()
來選擇所需的數據。 此代碼然后提取匹配所使用的那些foreach()
和if
來檢查它是否匹配(不完全確定要作為輸出什么,但這應該幫助)...
$source = [["2019-01-11T23:30:00CET", -12.6],
["2019-01-11T23:20:00CET", -12.5],
["2019-01-11T23:10:00CET", -12.6]
];
$extract = min(array_column($source, 1)); // or use max()
$output = [];
foreach ($source as $key => $element) {
if ( $element[1] == $extract ) {
// Matches, so add to output
$output[$key] = $element[0];
}
}
print_r($output);
會給
Array
(
[0] => 2019-01-11T23:30:00CET
[2] => 2019-01-11T23:10:00CET
)
您可以使用array_filter()
提取匹配的行,但是foreach()
足以滿足此類簡單要求(IMHO)。
如果value列中可能有空白值或字符串,則這可能會使min()
感到困惑,因為它將考慮這些值並將它們作為字符串進行比較,以確保將它們全部作為數字進行比較,您可以添加...
$values = array_map("floatval", array_column($source, 1));
$extract = min($values); // or use max()
array_map("floatval",...
瀏覽列表,並將它們全部轉換為浮點值。
另外,這是用於“在某個數組中找到最大值”的通用算法草圖,表示為偽代碼:
現在,這就是極客所稱的“ O(n)算法”,也就是說,其執行時間將“約為”數組中元素的數量。 好吧,如果這是“一次性”要求,那就很好。 而如果您實際想要做的是獲得“多個” max元素,則對數組進行排序(一次,然后保留排序的結果...)會變得明顯更好,因為排序將是O( log(n)) ...“以元素數量的一些對數的順序”,以及隨后從該排序數組中“彈出”元素的成本不再存在。
當然,還有其他方法可以做到這一點-樹木之類-但我在這里已經太遲了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.