Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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_Multidimensional Array - Fatal编程技术网

PHP提取并计算多维数组中每个元素的第一个元素

PHP提取并计算多维数组中每个元素的第一个元素,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个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"

我有一个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];
}
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)
}
*/
我试图计算每个数组的第一个元素中有多少个条目是相同的,结果如下:

apple (2)
samsung (2)
microsoft (1)
nokia (1)
我只是不确定什么是正确的方法


提前谢谢。

通过将深度数组的每个第一个元素推入一个新数组(
$result,在我的示例中)来收集它们,然后调用该数组。像这样:

$count = array();
foreach($mainArray as $array) {
    $first = $array[0];
    if(!isset($count[$first])) $count[$first] = 0;
    $count[$first]++;
}

print_r($count);
$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 ) );

您可以循环使用
$mainArray
来构建完整的数组/值列表,然后在该数组上使用:

另一个选项是循环通过
$mainArray
,插入值作为数组的索引(如果它不存在),然后每次递增(这与
数组计数值()的作用相同)(
):


您可以这样做:

 foreach($mainArray as $w => $n) {
  $whatever =  $mainArray[$w][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)
}
*/
输出():

所以,即使我是foreach的超级粉丝,我为什么不在这里使用它呢

首先,要计算数组中的值,在PHP中我们有。它为我们做了这项工作

所以剩下的唯一问题是将所有第一个项目放入一个数组,用
array\u count\u值对它们进行计数。这是一个典型的映射工作,我也喜欢映射,在
foreach
旁边,所以我尝试了if with worked,结果成功了

但是,您可能需要查找名为
array\u column
的函数。PHP本身尚未提供此功能,但:


你们太棒了,谢谢你们的快速帮助,非常感谢。
print_r(
    array_count_values(
        array_map('array_shift', $mainArray)
    )
);
Array
(
    [apple] => 2
    [samsung] => 2
    [microsoft] => 1
    [nokia] => 1
)
$counts = array_count_values(array_column($mainArray, 0));