我有一个大问题,我不知道如何开发这个: 所以我有一张桌子:
Array(
[0] => Array
(
[0] => Array
(
[host] => test1
)
)
[1] => Array
(
[0] => Array
(
[host] => test2
)
)
)
)
第二个表
Array
(
[0] => test1
[1] => ghfhfghfg
)
现在我想比较这些表和retourne $ nCount = 1,因为从第一个和第二个表中有2个主机等于。
答案 0 :(得分:1)
你可以这样做:
count(array_intersect(array_map(function($a) { return $a[0]['host']; }, $array1), $array2));
答案 1 :(得分:0)
首先,你必须知道你的输入是什么。在您的情况下,我假设您将始终拥有相同类型的多列"表" (正如你所说)。
对于这种情况,您可以使用类似下面的内容,将多列数组展平为平面数组,如第二个。
<?php
$multi_col = array(
array(
array(
'host'=>'test1'
)
),
array(
array(
'host'=>'test2'
)
)
);
$single_col = array('test1', 'sfsd');
$single_cold_multicol = array_map(function(Array $item){
return $item[0]['host'];
}, $multi_col);
$diff_compare = array_diff($single_col, $single_cold_multicol);
$nCount = count($single_col) - count($diff_compare);
如果您$multi_col
并不总是具有相同的深度,则需要递归展平。如果它总是具有相同的深度(你总是知道如何构建数组),你可以使用上面的代码。
答案 2 :(得分:0)
如果我能帮助它,我倾向于避免硬编码数组索引。
您的第一个数组结构是否始终相同?
我会写一个会使第一个数组变平的函数,例如:
function flatten($arr, &$acc=array()) {
if (empty($arr)) {
return $acc;
}
$e = array_pop($arr);
if (is_array($e)) {
flatten($e, $acc);
} else {
$acc[] = $e;
}
return flatten($arr, $acc);
}
这种展平方法适用于第一个数组的更一般情况。电话会是这样的:
$ar = array(
array(
'test1',
),
array(
'test2',
),
);
$ar2 = array(
'test1',
'ghfhfghfg',
);
$same = array_intersect(flatten($ar), $ar2);
var_dump($same);
您可以为flatten
功能添加更多检查。