70425


以下の画像のような、入れ子になっている連想配列から「文字列A」と「文字列B」が何回出現したか、それぞれ数えたいです。

[![画像の説明をここに入力](https://i.stack.imgur.com/klolH.png)](https://i.stack.imgur.com/klolH.png)

`array_count_values` で取得することを試みましたが、`array_count_values`
は要素をキーにして集計するので、入れ子になっている配列から取得しようとすると以下のようなエラーが出てしまいます。

[code]

    array_count_values(): Can only count STRING and INTEGER values!
    
[/code]

このような、入れ子になっている配列から、「文字列A」と「文字列B」が何回出現したかカウントするには、どのようなコードを書くべきでしょうか？  
以下のサイトを参考に試行錯誤しましたがやはり不明なままなので、教えていただきたいです。  
よろしくお願いいたします。

<https://stackoverrun.com/ja/q/3887188>

(追記)  
以下のようなコードを書いております。

[code]

        $row_count = 1;
    
        foreach ($file as $row)
        {
            // 1行目のヘッダーは取り込まない
            if ($row_count > 1)
            {
                //各値を取得する
                $id =      mb_convert_encoding($row[0],"UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
                $answer1 = mb_convert_encoding($row[7],"UTF-8", array("ASCII","JIS","UTF-8","EUC-JP","SJIS"));
    
                $out_arr[] = array($answer1);
    
            }
            $row_count++;
    
        }
        echo count($out_arr);
    
        print_r( array_count_values( $out_arr ) );
    }
    
[/code]


CC BY-SA 4.0
2020-09-15T13:24:32.147
70415
2020-09-17T00:38:04.597
2020-09-15T16:33:36.717
3060
41667
question
php laravel array
入れ子になった連想配列から、それぞれの要素の数を数えたい


まずはエラーをきちんと理解しましょう。

> array_count_values(): Can only count STRING and INTEGER values!

とあるのでarray_count_valueに渡しているデータの中身（`$out_arr`）を見てみてください。おそらくStringとint以外の型が入っていると思います。

おそらく中身が

[code]

    array(
     0 => array(0 => "文字列A"),
     1 => array(0 => "文字列B"),
     2 => array(0 => "文字列A")
    )
    
[/code]

的な配列になっていると予想しますが、array_count_valueに渡すべき配列は以下のようにするべきでしょう

[code]

    array(
     0 => "文字列A",
     1 => "文字列B",
     2 => "文字列A"
    )
    
[/code]

となると何が起きているかというと  
単純に$out_arrの作り方が間違っていることになります。

具体的に言うと以下の部分

[code]

    $out_arr[] = array($answer1);
    
[/code]

配列に追加する`[]`を利用して末尾に追加していますが何を追加しているかというと$ansertを配列にしたものを追加してしまっています。

つまりは余分な配列を追加して、配列の次元が深くなってしまっています。

[code]

    $out_arr[] = $answer1;
    
[/code]

とするべきです。

まずはエラーを理解する、エラーからきちんとデバック（echoでもxdebugでもいいので）してみて正しいデータかどうか確認する。間違ったデータを作っているところを見直すを繰り返してみてください。


CC BY-SA 4.0
2020-09-16T01:27:59.877
70425
2020-09-17T00:38:04.597
2020-09-17T00:38:04.597
22665
22665
70415
answer