我在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)
我只是不确定这是做什么的正确方法。
提前谢谢。
答案 0 :(得分:7)
print_r(
array_count_values(
array_map('array_shift', $mainArray)
)
);
输出(Demo):
Array
(
[apple] => 2
[samsung] => 2
[microsoft] => 1
[nokia] => 1
)
所以,即使我是foreach
的粉丝,为什么我不在这里使用它?
首先,要计算数组中的值,在PHP中我们有array_count_values
。它为我们做好了工作。
因此,剩下的唯一问题是将所有第一项都放入数组中,以array_count_values
计算它们。这是一个典型的映射工作,我也喜欢在foreach
旁边进行映射,所以如果array_map
与array_shift
一起工作,我就会尝试 - 而且确实如此。
但是,您可能希望查找名为array_column
的函数。 PHP本身尚不可用,但as PHP code in another answer:
$counts = array_count_values(array_column($mainArray, 0));
答案 1 :(得分:1)
$count = array();
foreach($mainArray as $array) {
$first = $array[0];
if(!isset($count[$first])) $count[$first] = 0;
$count[$first]++;
}
print_r($count);
答案 2 :(得分: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 ) );
答案 3 :(得分: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]]++;
}
答案 4 :(得分: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)
}
*/