查找多维数组中的每个子数组,如果固定位置的元素是该子数组的最大值

问题描述

大家好。

对于 $arr_rgb 中的每个子数组(图 01),我必须找到: 如果 $key 编号为 1 的元素是此子数组中的最大编号,则返回 $key 编号 子阵列(图 03 和图 04. 到目前为止,我可以找到每个子数组的最高数字 - 图 02

在附图中解释了我遇到的“麻烦”。

[1]: https://i.stack.imgur.com/1QMy3.png

以及我目前使用的代码

<?PHP
$hex_splited = [
        ['00','00','00'],['10','11','10'],['F0','1A','C3'],['0F','FE','F4'],];

$arr_rgb = [];
$count2 = count($hex_splited);

for ($i=0; $i < $count2; $i++) { 
    
    $inn_count = count($hex_splited[$i]);
    
    for ($j=0; $j < $inn_count; $j++) { 
            
        $val = hexdec($hex_splited[$i][$j]);
        $arr_rgb[$i][$j] = $val;

        foreach ($arr_rgb as $key => $value) {
            $resultMax[$key] = max($value);
        }
    }
}

echo "<pre>";
var_dump($resultMax);
echo "</pre>";

    echo "<table border='1'>";
for ($m=0; $m < $count2; $m++) {
    echo "<tr>";
    for ($k=0; $k < $inn_count; $k++) { 
        echo "<td>";
        echo $arr_rgb[$m][$k];
        echo "</td>";
    }
    echo "</tr>";
}
echo "</table>";

解决方法

使用 max 确定最大值仅适用于整数,因此我将使用 array_maphexdec 来实现这一点。

然后它所需要的只是将位置 1 处的值与该最大值进行比较,如果它们相同,则将索引添加到结果数组中:

$result = [];
foreach($hex_splited as $key => $value) {
  if(hexdec($value[1]) == max(array_map('hexdec',$value))) {
    $result[] = $key;
  }
}
var_dump($result);

这会让你 0,1,3 作为结果。 (恕我直言,根据您的要求,第一个子数组中位置 1 处的值 00 也是该子数组中所有值的最大值。如果您需要排除 0 个值,然后您必须进行相应的修改。)

编辑:

如果所有元素都相等,则不返回任何内容

好的,这也可以很容易地实现 - 我们使用 array_count_values,如果 that 的计数仅为 1,则意味着所有元素都具有完全相同的值。

那么就变成了

foreach($hex_splited as $key => $value) {
  if(count(array_count_values($value)) != 1 &&
      hexdec($value[1]) == max(array_map('hexdec',$value))) {
    $result[] = $key;
  }
}

这样,您将在此处获得 [1,3] 作为 $result。