【问题标题】:PHP comparing all value inside column of multidimensional array with variablePHP将多维数组列内的所有值与变量进行比较
【发布时间】:2018-06-03 05:31:59
【问题描述】:
我有一个多维数组和一个要比较的变量:
$var = 1;
$arr = array(
0 => array(
'id' => 5
'NumberAssigned' = 1
),
n => array(
'id' => 22
'NumberAssigned' = 1
)
)
我想将多维数组中NumberAssigned 列中的所有值与变量进行比较,如果列中的所有值都与变量匹配,则$var = $var+1。解决办法是什么?
【问题讨论】:
标签:
php
multidimensional-array
【解决方案1】:
一种选择是使用array_column 将多维数组变成一个简单数组。使用array_unique 获取唯一值。如果唯一值只有 1 个且与$var 相同,则所有NumberAssigned 与$var 相同
$var = 1;
$arr = array(
0 => array(
'id' => 5,
'NumberAssigned' => 1
),
1 => array(
'id' => 22,
'NumberAssigned' => 1
),
2 => array(
'id' => 23,
'NumberAssigned' => 1
),
);
$num = array_unique(array_column($arr,'NumberAssigned'));
if( count($num) === 1 && $num[0] === $var ) $var++;
【解决方案2】:
无需循环。
使用 array_column 获取所有值并使用 array_unique 删除重复项。
如果 var 在数组中并且计数为 1,则所有值都匹配 var。
$narr = array_unique(array_column($arr, "NumberAssigned"));
If(in_array($var, $narr) && count($narr) == 1){
$var++;
}Else{
// They are not all 1
}
Echo $var;
https://3v4l.org/k08NI
【解决方案3】:
您可以通过将目标列用作第一级键来强制唯一性。当您不需要微优化时,作为一种简洁的技术,您可以使用:
if (count(array_column($arr, null, 'NumberAssigned')) < 2)
// true if $arr is empty or all values in column are the same
这在技术上并不是最快的。 最快算法允许在迭代列中的整个数据集之前提前返回。
function allValuesAreSame($array, $columnName) {
$result = [];
foreach ($array as $row) {
$result[$row[$columnName]] = null;
if (count($result) > 1) {
return false;
}
}
return true; // also true if $array is empty
}