如何在循环数组中检查相同的值或多个值,并在php上生成新的键作为区分符
我想检查这些值在循环数组中有相同或多个条件,还有其他条件。我应该做什么样的条件 在我制作的数组中[title]=>Kue-Lapis有两个,而[title]=>Kue-Nastar只有一个 我发现了同样的问题,但我想从中得到不同的结果 我想要的是,如果值相同或不止一个,它将创建一个新键[confirm]=true,如果不是,则键[confirm]=false 这是我的阵列如何在循环数组中检查相同的值或多个值,并在php上生成新的键作为区分符,php,arrays,Php,Arrays,我想检查这些值在循环数组中有相同或多个条件,还有其他条件。我应该做什么样的条件 在我制作的数组中[title]=>Kue-Lapis有两个,而[title]=>Kue-Nastar只有一个 我发现了同样的问题,但我想从中得到不同的结果 我想要的是,如果值相同或不止一个,它将创建一个新键[confirm]=true,如果不是,则键[confirm]=false 这是我的阵列 Array ( [0] => Array ( [order] =&
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
的第三个参数,他们只执行了一次。请检查的文件,没有说这是唯一执行的,因为我可以看到。如果这是真的,那么就没有理由解释为什么这段代码要慢得多,事实确实如此。但也许我错了。但不管怎样,它都比传统的循环慢得多。