Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在循环数组中检查相同的值或多个值,并在php上生成新的键作为区分符_Php_Arrays - Fatal编程技术网

如何在循环数组中检查相同的值或多个值,并在php上生成新的键作为区分符

如何在循环数组中检查相同的值或多个值,并在php上生成新的键作为区分符,php,arrays,Php,Arrays,我想检查这些值​​在循环数组中有相同或多个条件,还有其他条件。我应该做什么样的条件 在我制作的数组中[title]=>Kue-Lapis有两个,而[title]=>Kue-Nastar只有一个 我发现了同样的问题,但我想从中得到不同的结果 我想要的是,如果值相同或不止一个,它将创建一个新键[confirm]=true,如果不是,则键[confirm]=false 这是我的阵列 Array ( [0] => Array ( [order] =&

我想检查这些值​​在循环数组中有相同或多个条件,还有其他条件。我应该做什么样的条件

在我制作的数组中[title]=>Kue-Lapis有两个,而[title]=>Kue-Nastar只有一个

我发现了同样的问题,但我想从中得到不同的结果

我想要的是,如果值相同或不止一个,它将创建一个新键[confirm]=true,如果不是,则键[confirm]=false

这是我的阵列

Array
(
    [0] => Array
        (
            [order] => 127
            [title] => Kue Nastar
        )

    [1] => Array
        (
            [order] => 128
            [title] => Kue Lapis
        )

    [2] => Array
        (
            [order] => 129
            [title] => Kue Lapis
        )
)
这是我想要的结果

Array
(
    [0] => Array
        (
            [order] => 127
            [title] => Kue Nastar
            [comfirm] => 0
        )

    [1] => Array
        (
            [order] => 128
            [title] => Kue Lapis
            [comfirm] => 1
        )

    [2] => Array
        (
            [order] => 129
            [title] => Kue Lapis
            [comfirm] => 1

        )
)

您需要循环数组两次。
一次获取每个标题的计数,一次创建您期望的输出

// Create associative array of title and count
foreach($arr as $val){
    if(!isset($counts[$val['title']])) $counts[$val['title']] = 0;
    $counts[$val['title']]++;
}

// Add count 1/0 to array
foreach($arr as &$val){
    if($counts[$val['title']] > 1){
        $val['confirm'] = 1;
    }else{
        $val['confirm'] = 0;
    }
}

var_dump($arr);

您需要循环阵列两次。
一次获取每个标题的计数,一次创建您期望的输出

// Create associative array of title and count
foreach($arr as $val){
    if(!isset($counts[$val['title']])) $counts[$val['title']] = 0;
    $counts[$val['title']]++;
}

// Add count 1/0 to array
foreach($arr as &$val){
    if($counts[$val['title']] > 1){
        $val['confirm'] = 1;
    }else{
        $val['confirm'] = 0;
    }
}

var_dump($arr);

您可以使用
数组计数值
数组列
数组步

$tCounts = array_count_values(array_column($a, 'title'));
array_walk($a, function(&$v, $k) use($tCounts){
  $v['confirm'] = $tCounts[$v['title']] > 1 ? true : false;
});

您可以使用
array\u count\u值
array\u列
array\u walk

$tCounts = array_count_values(array_column($a, 'title'));
array_walk($a, function(&$v, $k) use($tCounts){
  $v['confirm'] = $tCounts[$v['title']] > 1 ? true : false;
});
使用内置函数和,您只需要一行代码

array_walk($arr, function(&$elem, $index, $occurrence)
{
    $elem['comfirm'] = (int)($occurrence[$elem['title']] > 1);
},
array_count_values(array_column($arr, 'title')));
使用内置函数和,您只需要一行代码

array_walk($arr, function(&$elem, $index, $occurrence)
{
    $elem['comfirm'] = (int)($occurrence[$elem['title']] > 1);
},
array_count_values(array_column($arr, 'title')));

这将是示例数组的四次迭代,因为您最好使用它。如果阵列更大,那么它将更大iterations@Andreas你能详细解释一下吗?怎么可能是四次迭代呢?只有2次迭代,你可以循环一次外部循环。这是一个。数组中有三个项,每次迭代都会执行数组的另一个循环(3x1)。这意味着1+3。在这里,我为每次循环添加一个“1”,我得到11个“1”,这将是示例数组的四次迭代,因为您最好使用它。如果阵列更大,那么它将更大iterations@Andreas你能详细解释一下吗?怎么可能是四次迭代呢?只有2次迭代,你可以循环一次外部循环。这是一个。数组中有三个项,每次迭代都会执行数组的另一个循环(3x1)。这意味着1+3。在这里,每次循环我都加上一个“1”,最多3次得到11个“1”。不。。那你就不懂你的代码了。使用数组_walk循环数组。然后在每次迭代中,你做一个循环数组的数组列,然后你做一个循环数组计数值,这也是一个循环。对于所讨论的三项数组,您将数组循环9次,每次迭代中有3项,即27项。Andreas,请再次理解代码,
array\u count\u value
array\u column
array\u walk
的第三个参数,他们只执行了一次。请检查的文件,没有说这是唯一执行的,因为我可以看到。如果这是真的,那么就没有理由解释为什么这段代码要慢得多,事实确实如此。但也许我错了。但不管怎样,它都比传统的循环慢得多。最多3次。不。。那你就不懂你的代码了。使用数组_walk循环数组。然后在每次迭代中,你做一个循环数组的数组列,然后你做一个循环数组计数值,这也是一个循环。对于所讨论的三项数组,您将数组循环9次,每次迭代中有3项,即27项。Andreas,请再次理解代码,
array\u count\u value
array\u column
array\u walk
的第三个参数,他们只执行了一次。请检查的文件,没有说这是唯一执行的,因为我可以看到。如果这是真的,那么就没有理由解释为什么这段代码要慢得多,事实确实如此。但也许我错了。但不管怎样,它都比传统的循环慢得多。