【问题标题】:custom count in array PHP数组 PHP 中的自定义计数
【发布时间】:2014-09-03 20:12:46
【问题描述】:

我有一个带有如下字符串的 PHP 数组:

Tim Jones
Karl Smith
Tim Jones
T Jones
K Smith
Tim JONES

我想获取数组中每个字符串的出现次数。我用array_count_values。但它会返回

Tim Jones : 2
Karl Smith : 1
T Jones : 1
K Smith : 1
Tim JONES : 1

但我只需要检查姓氏和名字的第一个字母以进行计数

Tim Jones : 4
Karl Smith : 2

有关如何执行此操作的任何建议。谢谢

编辑

这是一个更正确的例子。如果数组是

Tim Jones
Karl Smith
Harry Jones
Tim Jones
T Jones
K Smith
Tim JONES

输出应该是

Tim Jones : 4
Karl Smith : 2
Harry Jones : 1

我对 PHP 不是很熟悉。我遇到了array_count_values 并尝试了它。但我需要做一些数组拆分、搜索和计数。

基于 Chris 代码,这就是我现在所拥有的

<?php
$names = array (
'Tim Jones',
'Karl Smith',
'Tim Jones',
'T Jones',
'K Smith',
'Tim JONES'
);

$counts = array();
$actualMap = array();

foreach ($names as $name) {
$last_name = strtolower(array_pop((explode(' ', $name))));
$first_name_letter = substr(strtolower(array_shift((explode(' ', $name)))), 0, 1);

$first_name = array_shift(explode(' ',$name));
$actualKey = $first_name . ' '. ucfirst($last_name);

$key = $first_name_letter . ' '. $last_name;

if (array_key_exists($key, $counts) === false){
    $counts[$key] = 0;
    $actualMap[$key] = $actualKey;
}

$counts[$key]++;
}
print_r($counts);
print_r($actualMap);

?>

我得到以下

 Array ( [t jones] => 4 [k smith] => 2 ) Array ( [t jones] => Tim Jones [k smith] => Karl Smith )

我现在需要更换钥匙

【问题讨论】:

  • 创建一个姓氏数组,然后调用array_count_values
  • 向我们展示您到目前为止所做的事情,您需要搜索姓氏,因此您需要姓氏作为数组,然后使用php.net/manual/en/function.strpos.php
  • @Barmar 我将问题更新为正确的问题。请查看我的编辑。
  • 创建一个first-initial last-name 的数组并在上面调用array_count_values

标签: php arrays


【解决方案1】:

1) 遍历列表,创建一个[(First letter + " " +unique last name, count=0) , ...] 列表。

或者

您可以使用 array_unique。 Here 是文档

2) 然后与第一个列表相比,再次遍历该列表并添加到该唯一姓氏的计数中。

【讨论】:

    【解决方案2】:

    不是 100% 确定这是否是您所要求的,但我会将数组中的名称标准化,然后您可以计算它们

    $array=array("Tim Jones","Karl Smith","Tim Jones","T Jones","K Smith","Tim JONES");
    
    function editArray($array){
    foreach($array as $x){
        list($firstname,$notfirst)=explode(" ",$x);
        $newnames[]=strtolower($firstname[0]." ".$notfirst);
    }
    return $newnames;
    }
    $newarray=editArray($array);
    print_r(array_count_values($newarray));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多