如何在数组中多次检查名称是否存在

时间:2017-10-08 07:17:03

标签: php arrays foreach

我需要在包含4个不同子数组的以下数组中的names键中检查名称john是否超过3次

Array
(
    [0] => Array
        (
            [total] => 4.2
            [name] => john
        )

    [1] => Array
        (
            [total] => 2
            [name] => john
        )

    [2] => Array
        (
            [total] => 3
            [name] => adam
        )

    [3] => Array
        (
            [total] => 1.5
            [name] => john
        )

)

我首先使用的是mysql,但我更喜欢使用php而不是

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

 $counts = array_count_values(array_column($array,"name"));

然后检查是否有3个人打电话给" john" :

 if (isset($counts["john"]) && $counts["john"] >= 3) {
      //Do stuff
 } else {
      //Do different stuff
  }

要查找所有未被称为" john"您可以将上述更改为@Andreas建议:

  if (isset($counts["john"]) && (count($array) - $counts["john"]) > 3) {
     //Do stuff
 } else {
      //Do different stuff
  }

或者选择:

 $notJohn = count(array_filter($array, function ($element) {
      return $element["name" != "john";
 }));
 if ($notJohn >= 3) ...

答案 1 :(得分:0)

此处, $ namesArray 在数组中,其中包含重复值。目标是计算数组中每个值的存在时间。

  

$ namesArray =   阵列( “John” 的 “标记”, “约翰”, “丹”, “Hasib”, “米隆”, “沙末”, “米隆”, “约翰”);

$newArray = array();
    foreach($namesArray as $name){
        if(isset($newArray[$name])){
           $newArray[$name]++;
        }else{
           $newArray[$name] = 1;
        }
    }

根据代码输出:

Array(
  [John] => 3
  [Mark] => 1
  [Dan] => 1
  [Hasib] => 1
  [Milon] => 2
  [Samad] => 1
)

答案 2 :(得分:0)

这样的功能可以完成这项工作 我大致用手机写的。

  $occurence = 0;
  function a() {
  for($x = 0; $x < 4; $x++) {
    for($y = 0; $y < 2; $y++) {
      if (array[$x][$y] === "John") {
        $occurence++;
      }
    }
  }
  if($occurence > 3) {
    return false;
  }
  else {
    return true;
    }
 }