2017-10-08 38 views
2

我需要检查是否存在是名称中存在多次约翰在名称键的3倍以上以下阵列,其中包含4个不同的子阵列如何检查中的名称的数组

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

你可以做到以下几点:

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

然后检查是否有3人被称为“约翰”:

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

要找到检查不叫所有peole “约翰”,你可以更改以上为@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) ... 
+0

,完美的工作,但我问反向我想看看有多少人是不是叫约翰数组 – mirvatJ

+1

在再算上阵列核减约翰 – Andreas

+0

它的10个元素的数组和嫖客的人数的问题应该不超过3,我应该这样做吗?<= 7' – mirvatJ

0
$names = array("John","Mark","John","Dan","Hasib","Milon","Samad","Milon","John"); 
$existName = array(); 
    foreach($names as $name){ 
     if(isset($existName[$name])){ 
      $existName[$name]++; 
     }else{ 
      $existName[$name] = 1; 
     } 
    } 

    echo "<pre>"; 
    print_r($existName); 

    -------- *Output* --------- 
      Array(
       [John] => 3 
       [Mark] => 1 
       [Dan] => 1 
       [Hasib] => 1 
       [Milon] => 2 
       [Samad] => 1 
      ) 
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; 
    } 
}