我刚才刚问过这个问题,但我说错了所以我道歉。
我希望有一个简单的方法可以做到这一点,没有吨和大量的循环。
我有以下方式的矩阵:
Foo1 Foo2 Foo3 .... FooN
Jan 1 8 5 4
Feb 10 12 15 11
Mar 12 7 4 3
Apr 10 16 7 17
假设有以下数组:
$arrayMonths = array(
'jan' => array(1, 8, 5,4)
'feb' => array(10,12,15,11)
'mar' => array(12, 7, 4, 3)
'apr' => array(10,16,7,17)
);
我需要对上面的数组进行排序并以下列方式显示它:
array[apr][FooN] = 17
array[feb][Foo3] = 15
array[mar][Foo1] = 12
array[jan][Foo2] = 8
基本上,我需要获得上述权重的最大值,一个月只能有一个foo,一个foo只能有一个月。在上面的例子中,结果将是52。
由于
答案 0 :(得分:0)
PHP函数max()
是关键所在:
$sum = 0;
foreach ($array as $row) {
$sum += max($row);
}
echo $sum;
答案 1 :(得分:0)
$totalArr = array();
$total = 0;
foreach($arrayMonths as $month => $row)
{
$high = max($row);
$totalArr[$month]['foo'] = $high;
$total += $high;
}
echo "Total is: " . $total . "\n\n";
print_r($totalArr);
<强>输出:强>
Total is: 52
Array
(
[jan] => Array
(
[foo] => 8
)
[feb] => Array
(
[foo] => 15
)
[mar] => Array
(
[foo] => 12
)
[apr] => Array
(
[foo] => 17
)
)
如果要对新阵列进行排序,请使用uasort()
。
http://php.net/manual/en/function.uasort.php
答案 2 :(得分:0)
研究这种做法。 http://www.php.net/manual/en/function.uasort.php
输入数组和对自己编写的比较函数的引用。
答案 3 :(得分:0)
请参阅演示:http://codepad.org/vDI2k4n6
$arrayMonths = array(
'jan' => array(1, 8, 5,4),
'feb' => array(10,12,15,11),
'mar' => array(12, 7, 4, 3),
'apr' => array(10,16,7,17),
);
$position = array("Foo1","Foo2","Foo3","FooN");
$set = array();
foreach($arrayMonths as $key => $value)
{
$max = max($value);
$pos = array_search($max, $value);
$set[$key][$position[$pos]] = $max ;
}
function cmp($a, $b)
{
foreach($a as $key => $value )
{
foreach ($b as $bKey => $bValue)
{
return $bValue - $value ;
}
}
}
uasort($set,"cmp");
var_dump($set);
输出
array
'apr' =>
array
'FooN' => int 17
'feb' =>
array
'Foo3' => int 15
'mar' =>
array
'Foo1' => int 12
'jan' =>
array
'Foo2' => int 8
答案 4 :(得分:0)
$arr_new = array();
foreach(array_keys($arrayMonths) as $h) {
$int_max = max($arrayMonths[$h]);
foreach(array_keys($arrMonths[$h]) as $h2)
if ($arrMonths[$h][$h2] == $int_max) {
$arr_new[$h]["foo{$h2}"] = $int_max;
break;
}
}