[英]PHP Extract and count first elements of each element in 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", "yellow")
);
我可以輕松地遍歷它並提取每個數組的所有第一個條目,如下所示:
foreach($mainArray as $w => $n) {
$whatever = $mainArray[$w][0];
}
我正在嘗試計算每個數組的第一個元素中有多少條目相同,並且結果如下:
apple (2)
samsung (2)
microsoft (1)
nokia (1)
我只是不確定這樣做的正確方法是什么。
先感謝您。
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_map
與array_shift
一起工作 - 它確實如此。
但是,您可能希望查找名為array_column
的函數。 PHP本身尚不可用,但在另一個答案中作為PHP代碼 :
$counts = array_count_values(array_column($mainArray, 0));
$count = array();
foreach($mainArray as $array) {
$first = $array[0];
if(!isset($count[$first])) $count[$first] = 0;
$count[$first]++;
}
print_r($count);
通過將深數組的每個第一個元素推入一個新數組(在我的示例中$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 ) );
你可以遍歷$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]]++;
}
你可以這樣做:
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)
}
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.