【问题标题】:PHP nested foreach to get unique size of array [duplicate]PHP嵌套foreach以获得数组的唯一大小[重复]
【发布时间】:2018-10-24 12:41:36
【问题描述】:

情况如下: 有上千条数据。但并非所有这些都是独一无二的。第一个foreach 循环是独一无二的。所以,我将大小放在 Array 中。下一个循环可能具有相同的大小。所以,我正在检查variablesize。如果在Array 中找到大小,则意味着它不是唯一的,否则该变量的大小将在Array 中。问题是我在数组中变得常见且唯一(两者)大小。

PHP 代码:

$counter = array();
foreach ($result_all as $data){
    $message =  $data['msg'];
    $size_of_message = strlen($message);

    if(contains($message,$chittagong)){
       if(empty($counter)){
           $counter[] = $size_of_message;
       }else{
           foreach($counter as $a) {
               if ($size_of_message !== $a)
                   $counter[] = $size_of_message;
           }
       }
    }
}

结果:

Array
(
    [0] => 153
    [1] => 122
    [2] => 165
    [3] => 165
)

我期待的结果:

Array
(
    [0] => 153
    [1] => 122
    [2] => 165
)

【问题讨论】:

标签: php foreach


【解决方案1】:

问题出在这里:

           foreach($counter as $a) {
               if ($size_of_message !== $a)
                   $counter[] = $size_of_message;
           }

您正在将 $size_of_message 与每个现有元素进行比较,其中大多数 if 语句将返回 true,将新元素添加到计数器。并且您只想在没有元素匹配它的情况下添加它。 所以你需要使用in_array()函数而不是foreach

if (!in_array($size_of_message, $counter) {
  $counter[] = $size_of_message;
}

在这种情况下,您也不需要检查数组是否为空。

【讨论】:

  • 太棒了!您的解决方案刚刚奏效!非常感谢!
【解决方案2】:

您可以轻松使用原生函数array_unique

$array = [0=>153, 1=>122, 2=>165, 3=>165];
$array_unique = array_unique($array);
print_r($array_unique);

【讨论】:

  • 我找到了解决方案!我不知道 Array Unique,看来这个功能也可以。谢谢。
【解决方案3】:

试试

$counter = array();
foreach ($result_all as $data){
    $message =  $data['msg'];
    $size_of_message = strlen($message);
    if(contains($message,$chittagong)){
       if(empty($counter)){
           $counter[] = $size_of_message;
       }
       if(!empty($counter)){
           foreach($counter as $a) {
               if ($size_of_message !== $a)
                   $counter[] = $size_of_message;
           }
       }
    }
}

或使用 Array Unique 在foreach之后

【讨论】:

  • 我找到了解决方案!我不知道 Array Unique,似乎这个功能也有效。谢谢顺便说一句。
【解决方案4】:

也许使用数组键唯一性是一个想法:

$result = array();
foreach ($result_all as $data){
    $result[strlen($data['msg'])] = true;
}
$result = array_keys($result);

【讨论】:

    猜你喜欢
    • 2015-12-30
    • 2011-04-10
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多