【问题标题】:count how many duplicate keys are in array of objects?计算对象数组中有多少个重复键?
【发布时间】:2018-07-24 19:01:31
【问题描述】:
[
    {
        "playerId":3207,
        "playerName":"RyanGarbutt",
        "playerPos":"C",
        "playerApiId":"5079"
    },
    {
        "playerId":3238,
        "playerName":"Max Domi",
        "playerPos":"C",
        "playerApiId":"5412"
    },
    {
        "playerId":3240,
        "playerName":"AnthonyDuclair",
        "playerPos":"LW",
        "playerApiId":"5441"
    }
]

1-> 我想计算 playerPos(C,LW) 的出现次数? 2-> 如何获取 [{"c":"2"},{"LW":"1"}]

格式的数据

【问题讨论】:

  • 发布您目前拥有的任何代码。
  • foreach循环有问题吗?

标签: php arrays duplicates key


【解决方案1】:

你可以使用array_reduce

$arr = '[{"playerId":3207,"playerName":"RyanGarbutt","playerPos":"C","playerApiId":"5079"},{"playerId":3238,"playerName":"Max Domi","playerPos":"C","playerApiId":"5412"},{"playerId":3240,"playerName":"AnthonyDuclair","playerPos":"LW","playerApiId":"5441"}]';
$arr = json_decode( $arr, true );

$result = array_reduce( $arr , function( $c, $v ) {
    isset( $c[ $v[ "playerPos" ] ] ) ? $c[ $v[ "playerPos" ] ]++ : $c[ $v[ "playerPos" ] ] = 1;
    return $c;
}, array() );


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

这将导致:

Array
(
    [C] => 2
    [LW] => 1
)

文档:http://php.net/manual/en/function.array-reduce.php

【讨论】:

  • 我建议不要回答提问者显然没有花费任何精力自己寻找解决方案的问题。您只会鼓励人们将 Stack Overflow 视为免费劳动力的来源。
【解决方案2】:

没有循环、条件和回调函数。

$arr = '[{"playerId":3207,"playerName":"RyanGarbutt","playerPos":"C","playerApiId":"5079"},{"playerId":3238,"playerName":"Max Domi","playerPos":"C","playerApiId":"5412"},{"playerId":3240,"playerName":"AnthonyDuclair","playerPos":"LW","playerApiId":"5441"}]';
$arr = json_decode( $arr, true );
$result = array_count_values(array_column($arr,"playerPos"));
print_r($result);

输出

    Array ( 
          [C] => 2 
          [LW] => 1 
)

工作示例 Demo

【讨论】:

    【解决方案3】:

    你可以试试这样的:

    1/ 首先,创建两个变量,您将用作“C”和“LW”出现的计数器:

    $C  = 0;
    $LW = 0;   
    

    2/ 使用 foreach 循环遍历您的数组,并每次测试您的 obj 键“playerPos”的值是否等于“C”或“LW”,然后为您的计数器 var 添加 +1:

    foreach($array as $obj) {
        $test = $obj['playerPos'];
        if ($test == "C")
            $C++;
        else if ($test == "LW")
            $LW++;
    }
    

    3/ 然后你需要检查每个var的值来知道出现的次数。

    这是你要找的吗?

    【讨论】:

      【解决方案4】:
      function unique_multidim_array($array, $key) {
          $temp_array = array();
          $i = 0;
          $key_array = array();
      
          foreach($array as $val) {
              if (!in_array($val[$key], $key_array)) {
                  $key_array[$i] = $val[$key];
                  $temp_array[$i] = $val;
              }
              $i++;
          }
          return $temp_array;
      }
      
      $data =
          '[{
          "playerId":3207,"playerName":"RyanGarbutt","playerPos":"C","playerApiId":"5079"},{
          "playerId":3238,"playerName":"Max Domi","playerPos":"C","playerApiId":"5412"},{
          "playerId":3240,"playerName":"AnthonyDuclair","playerPos":"LW","playerApiId":"5441"}]';
      
      $data=json_decode($data,true);
      
      $uniqueArray = unique_multidim_array($data,'playerPos');
      
      print_r($uniqueArray);
      
      print_r(count($uniqueArray));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-30
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 2019-06-03
        • 2019-08-22
        相关资源
        最近更新 更多