Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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_Counting - Fatal编程技术网

Php 计数具有多个键的数组中的出现次数

Php 计数具有多个键的数组中的出现次数,php,arrays,counting,Php,Arrays,Counting,我试图获取包含count 1键值的数组的出现次数,例如: $newarray[0] = [ 'id' => '2', 'date' => '2016-04-22' ]; $newarray[1] = [ 'id' => '2', 'date' => '2016-04-13

我试图获取包含count 1键值的数组的出现次数,例如:

 $newarray[0] = [
                    'id' => '2',
                    'date' => '2016-04-22'
                    ];
 $newarray[1] = [
                    'id' => '2',
                    'date' => '2016-04-13'
                    ];
 $newarray[2] = [
                    'id' => '2',
                    'date' => '2016-04-12'
                    ];
 $newarray[3] = [
                    'id' => '1',
                    'date' => '2016-03-11'
                    ];
 $newarray[4] = [
                    'id' => '2',
                    'date' => '2016-03-05'
                    ];
 $newarray[5] = [
                    'id' => '1',
                    'date' => '2016-03-01'
                    ];
我想把这个转变成这样:

Array ( [0] => Array ( [id] => 1 [date] => 2016-03-11 [occurences] => 2 ) [1] => Array ( [id] => 2 [date] => 2016-04-22 [occurences] => 4 )  )
我试着这样做:

$cleanarray;
$newarray2=$newarray;
$newarray;
$k=0;
$num=1;

for($i=0; $i<count($newarray); $i++){
    for($j=1; $j<count($newarray2); $j++){
        if($newarray2[$j]["id"]==$newarray[$i]["id"]){
          $num++;
        }        

    }
    $cleanarray[$k] = [
                    'id' => $newarray[$i]["id"],
                    'date' => $newarray[$i]["date"],
                    'occurences' => $num
                ];
    $k++;
  $num=0;
}

但在这种情况下它不起作用,我怎样才能找到解决方案

您可以按如下方式进行:-

$final_array = array();

foreach($newarray as $arr){
   if(!in_array($arr['id'],array_keys($final_array))){
      $final_array[$arr['id']] = $arr;
      $final_array[$arr['id']]['occurences'] = 1;
   }else{
     $final_array[$arr['id']]['occurences'] += 1;
   }
}
$final_array= array_values($final_array);
print_r($final_array);
function cmpId($a, $b) {
    return ($a['id'] - $b['id']);
}

usort($final_array, "cmpId");
print_r($final_array);
输出:-

注意:-如果希望最终数组为id的升序,请使用如下函数:-

$final_array = array();

foreach($newarray as $arr){
   if(!in_array($arr['id'],array_keys($final_array))){
      $final_array[$arr['id']] = $arr;
      $final_array[$arr['id']]['occurences'] = 1;
   }else{
     $final_array[$arr['id']]['occurences'] += 1;
   }
}
$final_array= array_values($final_array);
print_r($final_array);
function cmpId($a, $b) {
    return ($a['id'] - $b['id']);
}

usort($final_array, "cmpId");
print_r($final_array);

输出:-

您可以按如下方式执行:-

$final_array = array();

foreach($newarray as $arr){
   if(!in_array($arr['id'],array_keys($final_array))){
      $final_array[$arr['id']] = $arr;
      $final_array[$arr['id']]['occurences'] = 1;
   }else{
     $final_array[$arr['id']]['occurences'] += 1;
   }
}
$final_array= array_values($final_array);
print_r($final_array);
function cmpId($a, $b) {
    return ($a['id'] - $b['id']);
}

usort($final_array, "cmpId");
print_r($final_array);
输出:-

注意:-如果希望最终数组为id的升序,请使用如下函数:-

$final_array = array();

foreach($newarray as $arr){
   if(!in_array($arr['id'],array_keys($final_array))){
      $final_array[$arr['id']] = $arr;
      $final_array[$arr['id']]['occurences'] = 1;
   }else{
     $final_array[$arr['id']]['occurences'] += 1;
   }
}
$final_array= array_values($final_array);
print_r($final_array);
function cmpId($a, $b) {
    return ($a['id'] - $b['id']);
}

usort($final_array, "cmpId");
print_r($final_array);

输出:-

我知道您在寻找什么,但我认为这可以解决您的问题:

$newarray[0] = [
                'id' => '2',
                'date' => '2016-04-22'
                ];
$newarray[1] = [
                'id' => '2',
                'date' => '2016-04-12'
                ];
$newarray[2] = [
                'id' => '2',
                'date' => '2016-04-12'
                ];
$newarray[3] = [
                'id' => '1',
                'date' => '2016-03-11'
                ];
$newarray[4] = [
                'id' => '2',
                'date' => '2016-03-05'
                ];
$newarray[5] = [
                'id' => '1',
                'date' => '2016-03-01'
                ];

foreach($newarray as $key => $value){
    if(isset($found[$value['id']][$value['date']])) {
        $found[$value['id']][$value['date']]++;
    } else {
        $found[$value['id']][$value['date']] = 1;
    }
}
print_r($found);
这将返回如下结果:-

Array
(
    [2] => Array
        (
            [2016-04-22] => 1
            [2016-04-12] => 2
            [2016-03-05] => 1
        )

    [1] => Array
        (
            [2016-03-11] => 1
            [2016-03-01] => 1
        )

)

我知道你在寻找什么,但我认为这可以解决你的问题:

$newarray[0] = [
                'id' => '2',
                'date' => '2016-04-22'
                ];
$newarray[1] = [
                'id' => '2',
                'date' => '2016-04-12'
                ];
$newarray[2] = [
                'id' => '2',
                'date' => '2016-04-12'
                ];
$newarray[3] = [
                'id' => '1',
                'date' => '2016-03-11'
                ];
$newarray[4] = [
                'id' => '2',
                'date' => '2016-03-05'
                ];
$newarray[5] = [
                'id' => '1',
                'date' => '2016-03-01'
                ];

foreach($newarray as $key => $value){
    if(isset($found[$value['id']][$value['date']])) {
        $found[$value['id']][$value['date']]++;
    } else {
        $found[$value['id']][$value['date']] = 1;
    }
}
print_r($found);
这将返回如下结果:-

Array
(
    [2] => Array
        (
            [2016-04-22] => 1
            [2016-04-12] => 2
            [2016-03-05] => 1
        )

    [1] => Array
        (
            [2016-03-11] => 1
            [2016-03-01] => 1
        )

)

在这个过程中使用临时密钥将是最有效的方法。临时键简化了输出数组任务,需要更少更快的检查。如果要在生成结果数组后按
id
排序,则临时键允许进行简单的
ksort()
调用

代码:()

输出:

array (
  0 => 
  array (
    'id' => '1',
    'date' => '2016-03-11',
    'occurrences' => 2,
  ),
  1 => 
  array (
    'id' => '2',
    'date' => '2016-04-22',
    'occurrences' => 4,
  ),
)

在这个过程中使用临时密钥将是最有效的方法。临时键简化了输出数组任务,需要更少更快的检查。如果要在生成结果数组后按
id
排序,则临时键允许进行简单的
ksort()
调用

代码:()

输出:

array (
  0 => 
  array (
    'id' => '1',
    'date' => '2016-03-11',
    'occurrences' => 2,
  ),
  1 => 
  array (
    'id' => '2',
    'date' => '2016-04-22',
    'occurrences' => 4,
  ),
)

AlivetoDie请参阅我对精简流程的回答。AlivetoDie请参阅我对精简流程的回答。