0

Key-gender と Key-rname で、2 つの key->value フィルターで次の連想配列からカウントしようとしています。以下を参照してください...

<pre>
Array
(
    [0] => Array
        (
            [fname] => jone
            [lname] => jani
            [gender] => m
            [rname] => N
        )

    [1] => Array
        (
            [fname] => jani
            [lname] => jone
            [gender] => m
            [rname] => N
        )

    [2] => Array
        (
            [fname] => sara
            [lname] => bulbula
            [gender] => w
            [rname] => D
        )

    [3] => Array
        (
            [fname] => hani
            [lname] => hanu
            [gender] => w
            [rname] => P
        )

    [4] => Array
        (
            [fname] => ttttttt
            [lname] => sssssss
            [gender] => m
            [rname] => C
        )

)
</pre>  

結果が欲しいのは次のとおりです..

名前の性別
        分波
N 2 0
D 0 1
P 0 1
C 1 0
合計 3 2

助けてください。

4

2 に答える 2

1

私はあなたの要求に似たようなことをするために使用した同様の関数を持っています..コードの欠如を示したので、これは単なるコピーアンドペーストです..これはあなたが期待するように配列を返します..これを繰り返すだけです.返された配列は、自分で調査する必要があるものです

function Array_Counter($Array){
        $Return_Arr = array(
            "M" => array(),
            "F" => array()
        );
    foreach ($Array AS $Arr){
        if ($Arr['gender'] === "m"){
            //Is Male
            @$Return_Arr['M'][$Arr['rname']] ++; // Message supressed due to returning undefined index warnings... Which because of not using isset().. Will still work
        }elseif ($Arr['gender'] === "f"){
            // Is Female
            @$Return_Arr['F'][$Arr['rname']] ++; // Message supressed due to returning undefined index warnings... Which because of not using isset().. Will still work
        }

    }
    return $Return_Arr;

}

 $Array = array (
    array(
        "gender" => "m",
        "rname" => "c"
    ),
    array(
        "gender"=> "f",
        "rname" => "d"
    ),
    array (
        "gender" => "f",
        "rname" => "a"
    ),
        array (
        "gender" => "f",
        "rname" => "x"
    ),
        /* Array shortened for exampling purposes */

);


$Array_Count = Array_Counter($Array);

次のように機能を使用する

echo "<pre>";
    print_r($Array_Count);
echo "</pre>";

戻り値:

Array
(
    [M] => Array
        (
            [c] => 1
            [j] => 1
            [g] => 1
            [d] => 1
        )

    [F] => Array
        (
            [d] => 3
            [a] => 1
            [x] => 1
        )

)
于 2013-07-20T23:14:12.183 に答える
1

あなたのコードが表示されないので、独自のコードを作成しようとしています。

$arr = array(
    array(
        'fname' => 'jone',
        'lname' => 'jani',
        'gender' => 'm',
        'rname' => 'N'
    ),
    array(
        'fname' => 'jani',
        'lname' => 'jone',
        'gender' => 'm',
        'rname' => 'N'
    ),
    array(
        'fname' => 'sara',
        'lname' => 'bulbula',
        'gender' => 'w',
        'rname' => 'D'
    ),
    array(
        'fname' => 'hani',
        'lname' => 'hanu',
        'gender' => 'w',
        'rname' => 'P'
    ),
    array(
        'fname' => 'ttttttt',
        'lname' => 'sssssss',
        'gender' => 'm',
        'rname' => 'C'
    ),
);

$matrix = array();
foreach (array('N', 'D', 'P', 'C', 'total') as $name) {
    foreach (array('m', 'w') as $gender) {
        $matrix[$name][$gender] = 0;
    }
}

foreach ($arr as $el) {
    $matrix[$el['rname']][$el['gender']] += 1;
    $matrix['total'][$el['gender']] += 1;
}


echo '<pre>';
print_r($matrix);
echo '</pre>';

// OR dynamicaly keys

$matrix = array();
foreach ($arr as $el) {
    if (!isset($matrix[$el['rname']][$el['gender']])) 
        $matrix[$el['rname']][$el['gender']] = 0;

    if (!isset($matrix['total'][$el['gender']])) 
        $matrix['total'][$el['gender']] = 0;

    $matrix[$el['rname']][$el['gender']] += 1;
    $matrix['total'][$el['gender']] += 1;
}


echo '<pre>';
print_r($matrix);
echo '</pre>';
于 2013-07-20T23:16:14.297 に答える