我搜索了很多线程,但找不到此解决方案 我有这个数组
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])中显示的这两个值中的
谢谢
答案 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)) ...“按元素数量的个对数的顺序,” ...,随后从该排序数组中“弹出”元素的成本就不存在了。
当然,还有其他方法可以做到–树木之类-但我在这里已经太迟了。