Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阵列计数误差_Php_Arrays_Associative Array - Fatal编程技术网

Php 阵列计数误差

Php 阵列计数误差,php,arrays,associative-array,Php,Arrays,Associative Array,我试图从两个键->值过滤器中的以下关联数组中计数,按键性别和键rname,请参见下面 <pre> Array ( [0] => Array ( [fname] => jone [lname] => jani [gender] => m [rname] => N ) [1] => Array

我试图从两个键->值过滤器中的以下关联数组中计数,按键性别和键rname,请参见下面

<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>  

排列
(
[0]=>阵列
(
[fname]=>jone
[lname]=>jani
[性别]=>m
[rname]=>N
)
[1] =>阵列
(
[fname]=>jani
[lname]=>jone
[性别]=>m
[rname]=>N
)
[2] =>阵列
(
[fname]=>莎拉
[lname]=>bulbula
[性别]=>w
[rname]=>D
)
[3] =>阵列
(
[fname]=>哈尼族
[lname]=>哈努
[性别]=>w
[rname]=>P
)
[4] =>阵列
(
[fname]=>ttttt
[lname]=>SSS
[性别]=>m
[rname]=>C
)
)
我想要的结果如下

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);
rname性别 m w n20 D 0 1 P0.1 C10 总数3 2
请帮帮忙

我有一个类似的函数,用于执行与您的请求类似的操作。。因此,这只是一个复制粘贴,因为您已经显示出缺少代码。。这将按预期返回一个数组。。只是在这个返回的数组上进行迭代,这是您需要自己研究的事情

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
        )

)

我没有看到你的代码,所以我正在尝试制作自己的代码

$arr=array(
排列(
“fname”=>“jone”,
“lname”=>“jani”,
“性别”=>“m”,
“rname”=>“N”
),
排列(
“fname”=>“jani”,
“lname”=>“jone”,
“性别”=>“m”,
“rname”=>“N”
),
排列(
“fname”=>“sara”,
“lname”=>“bulbula”,
“性别”=>“w”,
“rname”=>“D”
),
排列(
“fname”=>“哈尼”,
“lname”=>“哈努”,
“性别”=>“w”,
“rname”=>“P”
),
排列(
“fname”=>“ttttt”,
“lname”=>“SSS”,
“性别”=>“m”,
“rname”=>“C”
),
);
$matrix=array();
foreach(数组('N','D','P','C','total')作为$name){
foreach(数组('m','w')作为$gender){
$matrix[$name][$gender]=0;
}
}
外汇($arr为$el){
$matrix[$el['rname'][$el['gender']]+=1;
$matrix['total'][$el['gender']]+=1;
}
回声';
打印(矩阵);
回声';
//或动态键
$matrix=array();
外汇($arr为$el){
如果(!isset($matrix[$el['rname']][$el['gender']]))
$matrix[$el['rname'][$el['gender']]=0;
如果(!isset($matrix['total'][$el['gender']]))
$matrix['total'][$el['gender']]=0;
$matrix[$el['rname'][$el['gender']]+=1;
$matrix['total'][$el['gender']]+=1;
}
回声';
打印(矩阵);
回声';

那么,有错误的代码在哪里?我只能在一个键值中计数……但不能在两个键值中计数。我使用这个小函数,但只能在一个键值中计数。公共函数数组_列($array,$key){$field=array();foreach($array as$realKey=>$value){if(isset($value[$key])){$field[$realKey]=$value[$key];}}返回$field;}您的第一个foreach不会基于rname动态创建计数,例如,如果有一个rname作为
x
引入,会发生什么?您需要修改第一个foreach以接受此论证,这是非常好的解决方案,谢谢。Slawomir先生。
Array
(
    [M] => Array
        (
            [c] => 1
            [j] => 1
            [g] => 1
            [d] => 1
        )

    [F] => Array
        (
            [d] => 3
            [a] => 1
            [x] => 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>';