【问题标题】:Find for each sub array in multidimensional array, if element on fixed position is highest value for this sub array查找多维数组中的每个子数组,如果固定位置的元素是该子数组的最大值
【发布时间】:2021-04-13 03:09:29
【问题描述】:

大家好。

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

在附图中解释了我遇到的“问题”。

以及我目前使用的代码:

<?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>";

【问题讨论】:

  • 您是否可以通过存储您在第一个嵌套循环中找到的最大值的(行、列)对来完成,如果它的列值为 1,则返回/显示该对?跨度>
  • 为什么输出只是1, 3——第一个子数组呢?位置 1 处的值00 也与那里所有值的最大值相同。
  • 确切的输出与图片上的一样,但如果您有建议,他们也可以帮助我。
  • 如果所有元素都相等,则不返回任何内容
  • “确切的输出是图片上的样子” - 你需要解释这样的东西背后的逻辑,而不仅仅是“as在这张图中”。否则,我会给你function foo() { return [1, 3]; } 并说,这满足你的要求:-P

标签: php arrays max sub-array


【解决方案1】:

使用max 确定最大值仅适用于整数,因此我将使用array_map 和hexdec 来实现。

那么它所需要的就是将位置 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,则意味着所有元素的值完全相同。 p>

于是就变成了

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。

【讨论】:

  • 做得很好:) 非常感谢。欣赏它。
  • 只有当所有 3 个值都相等时,我们才不会返回结果,但如果其中 2 个相等,则使用此代码返回数组的键 (3) = [ 220, 220, 4] ;结果[3]。任何想法:)
  • 如果三个项目中只有两个是相等的,那么array_count_values 将返回一个包含两个条目的数组 - 所以那部分是count(array_count_values($value)) &lt; 3 然后。这能满足你现在想要的吗?
  • 这样完美:if(count(array_count_values($value)) &lt; 3 &amp;&amp; hexdec($value[1]) == max(array_map('hexdec', $value))) { $resultNone[] = $key; } elseif (count(array_count_values($value)) != 1 &amp;&amp; hexdec($value[1]) == max(array_map('hexdec', $value))) { $resultMax[] = $key; }
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多