在数组中找到最大值和父值

时间:2019-01-14 16:36:15

标签: php arrays

我搜索了很多线程,但找不到此解决方案 我有这个数组

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])中显示的这两个值中的

谢谢

2 个答案:

答案 0 :(得分:0)

如果使用array_column()提取数据的第二列,则可以将...patience... ...found 1036 targets... ...updating 3 targets... darwin.link.dll hello_ext.so ld: library not found for -lboost_python clang: error: linker command failed with exit code 1 (use -v to see invocation) "g++" -dynamiclib -Wl,-single_module -install_name "hello_ext.so" -o "hello_ext.so" "hello.o" -lboost_python -headerpad_max_install_names -fPIC -g -undefined dynamic_lookup /usr/local/boost_1_67_0/stage/lib ...failed darwin.link.dll hello_ext.so... ...skipped <p.>hello for lack of <p.>hello_ext.so... ...failed updating 1 target... ...skipped 2 targets... 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()足以满足诸如此类(IMHO)的要求。

如果值列中可能有空白值或字符串,则这可能会使foreach()感到困惑,因为它将考虑这些值并将它们作为字符串进行比较,以确保将它们全部比较为可以添加的数字...

min()

$values = array_map("floatval", array_column($source, 1)); $extract = min($values); // or use max() 遍历列表并将其全部转换为浮点值。

答案 1 :(得分:0)

此外,这是用于“在某个数组中找到最大值”的通用算法草图,表示为伪代码:

  • 如果数组为空,则“静静地离开”,否则引发异常。
  • 否则,假定数组中的第一个元素是最大的。
  • 现在,遍历其余元素,测试每个元素实际上是否大于您到目前为止所拥有的“最大元素”。如果是这样,请将其选择为“最大”。
  • 循环完成后,返回您的答案。

现在-这就是极客所称的“ O(n)算法”,也就是说,其执行时间将“等于”元素的数量。数组。好吧,如果这是“一次性”要求,那就很好。而实际上您实际上想要做的就是获得“多个”最大元素,对数组排序(一次,然后保留排序后的结果...)变得更好,因为排序将是 O(log(n)) ...“按元素数量的个对数的顺序,” ...,随后从该排序数组中“弹出”元素的成本就不存在了。

当然,还有其他方法可以做到–树木之类-但我在这里已经太迟了。