查找多维数组中的每个子数组,如果固定位置上的元素是该子数组的最大值
Find for each sub array in multidimensional array, if element on fixed position is highest value for this sub array
大家好。
对于 $arr_rgb 中的每个子数组(图 01),我必须找到:
如果 $key 编号为 1 的元素是此子数组中的最高编号,则 return $key 编号
子阵列(图 03 和图 04。
到目前为止,我可以找到每个子数组的最大数字 - 图 02
在附图中解释了我所拥有的"trouble"。
我目前使用的代码:
<?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_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个值,那么你将不得不相应地修改。)
编辑:
if all elements are equal, then return nothing
好吧,这也很容易实现——我们使用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 在这里。
大家好。
对于 $arr_rgb 中的每个子数组(图 01),我必须找到: 如果 $key 编号为 1 的元素是此子数组中的最高编号,则 return $key 编号 子阵列(图 03 和图 04。 到目前为止,我可以找到每个子数组的最大数字 - 图 02
在附图中解释了我所拥有的"trouble"。
我目前使用的代码:
<?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_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个值,那么你将不得不相应地修改。)
编辑:
if all elements are equal, then return nothing
好吧,这也很容易实现——我们使用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 在这里。