0

少し前に質問したばかりですが、間違った質問をしてしまい、申し訳ありません。

大量のループなしでこれを行う簡単な方法があることを願っています。

私は次の方法でマトリックスを持っています:

      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

基本的に、上記の重みの最大合計を取得する必要があります。1 か月には 1 つの foo しか持てず、1 つの foo には 1 か月しか持てません。上記の例では、結果は 52 になります。

ありがとう

4

5 に答える 5

0

ここで重要なのはPHP 関数max()です。

$sum = 0;
foreach ($array as $row) {
  $sum += max($row);
}
echo $sum;
于 2012-04-27T08:07:42.073 に答える
0

この方法を調べてください。 http://www.php.net/manual/en/function.uasort.php

配列と、自分で作成した比較関数への参照を入力します。

于 2012-04-27T08:12:51.447 に答える
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
于 2012-04-27T08:18:32.793 に答える
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;

        }

}
于 2012-04-27T08:18:40.813 に答える
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

于 2012-04-27T08:11:53.110 に答える