2

私はphpにこの配列を持っています、

   $mainArray = array(
      array("apple","two", "grren"),
      array("samsung","five", "red"),
      array("microsoft","one","gray"),
      array("apple","nine", "blue"),
      array("samsung","ten", "white"),
      array("nokia","seven", "yellow")
   );

簡単にループして、次のように各配列の最初のエントリをすべて抽出できます。

 foreach($mainArray as $w => $n) {
  $whatever =  $mainArray[$w][0];
}

各配列の最初の要素で同じエントリがいくつあるかをカウントしようとしていますが、次のような結果が得られます。

apple (2)
samsung (2)
microsoft (1)
nokia (1)

これを行う正しい方法が何であるかはわかりません。

前もって感謝します。

4

5 に答える 5

7
print_r(
    array_count_values(
        array_map('array_shift', $mainArray)
    )
);

出力 (デモ):

Array
(
    [apple] => 2
    [samsung] => 2
    [microsoft] => 1
    [nokia] => 1
)

私でさえ の大ファンであるのにforeach、なぜここで使わなかったのですか?

まず、配列内の値をカウントするには、PHP ではarray_count_values. それは私たちのために仕事をします。

したがって、残っている唯一の問題は、最初のすべての項目を配列に入れて、 でカウントすることarray_count_valuesでした。それは典型的なマッピングの仕事で、私もマッピングが好きなので、一緒foreachに試してみましたが、うまくいきました。array_maparray_shift

ただし、 という関数を探したい場合がありますarray_column。PHP自体ではまだ利用できませんが、別の回答のPHPコードとして:

$counts = array_count_values(array_column($mainArray, 0));
于 2012-11-09T18:18:47.237 に答える
1
$count = array();
foreach($mainArray as $array) {
    $first = $array[0];
    if(!isset($count[$first])) $count[$first] = 0;
    $count[$first]++;
}

print_r($count);
于 2012-11-09T18:15:20.553 に答える
1

深い配列の最初のすべての要素を新しい配列 ($result私の例では) にプッシュして収集し、その配列を呼び出しますarray_count_values()。そのようです:

$mainArray = array(
  array("apple","two", "grren"),
  array("samsung","five", "red"),
  array("microsoft","one","gray"),
  array("apple","nine", "blue"),
  array("samsung","ten", "white"),
  array("nokia","seven", "yellow")
);

$result = array();
foreach( $mainArray as $k => $v )
{
    // let's continue if $v is not an array or is empty
    if( !is_array( $v ) || empty( $v ) ) continue;

    $result[] = $v[ 0 ];
}

var_dump( array_count_values( $result ) );
于 2012-11-09T18:15:32.920 に答える
0

をループして、$mainArray値の完全な配列/リストを作成し、array_count_values()その上で使用できます。

$firstElements = array();
foreach ($mainArray as $arr) {
    $firstElements[] = $arr[0];
}
$counts = array_count_values($firstElements);

別のオプションは、ループし$mainArrayて値を配列のインデックスとして挿入し (まだ存在しない場合)、毎回インクリメントすることです (これは最終的に同じことを行いますarray_count_values())。

$counts = array();
foreach ($mainArray as $arr) {
    if (!isset($counts[$arr[0]])) $counts[$arr[0]] = 0;
    $counts[$arr[0]]++;
}
于 2012-11-09T18:15:55.623 に答える
0

次のように実行できます。

foreach($mainArray as $n) {
  $count[$n[0]] = isset($count[$n[0]]) ? $count[$n[0]]++ : 1;
}

var_dump($count); //should give you something like
/*
array(4) {
  ["apple"]=>
  int(2)
  ["samsung"]=>
  int(2)
  ["microsoft"]=>
  int(1)
  ["nokia"]=>
  int(1)
}
*/
于 2012-11-09T18:16:34.360 に答える