簡體   English   中英

PHP提取並計算多維數組中每個元素的第一個元素

[英]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_maparray_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM