今天尝试了解php的数组。
我有一组像这样的数组:
$a = array (
0 => array ( 'value' => 'America', ),
1 => array ( 'value' => 'England', ),
2 => array ( 'value' => 'Australia', ),
)
$b = array (
0 => array ( 'value' => 'America', ),
1 => array ( 'value' => 'England', ),
2 => array ( 'value' => 'Canada', ),
)
我需要获得数组b带来的'新'子数组。
即,我需要返回array ( 'value' => 'Canada', )
我以为我可以先合并$ a + $ b,然后将结果与$ a进行比较。
$merge = array_merge($a,$b);
$result = array_diff($merge,$a);
但不知怎的,这不起作用。它返回array()
为什么?谢谢!
答案 0 :(得分:2)
这应该可以解决问题:
$new = array();
foreach($b as $elem){
if(!in_array($elem, $a)){
$new[] = $elem;
}
}
返回加拿大。
答案 1 :(得分:0)
如果我将代码运行到array_merge($a, $b)
并执行var_dump($merge)
,我就明白了:
array(6) {
[0]=>
array(1) {
["value"]=>
string(7) "America"
}
[1]=>
array(1) {
["value"]=>
string(7) "England"
}
[2]=>
array(1) {
["value"]=>
string(9) "Australia"
}
[3]=>
array(1) {
["value"]=>
string(7) "America"
}
[4]=>
array(1) {
["value"]=>
string(7) "England"
}
[5]=>
array(1) {
["value"]=>
string(6) "Canada"
}
}
那不是,你有什么想法。
-
此外,php.net上的array_diff
's文档读取:
Note: Two elements are considered equal if and only if (string) $elem1 === (string) $elem2. In words: when the string representation is the same.
Note: This function only checks one dimension of a n-dimensional array. Of course you can check deeper dimensions by using array_diff($array1[0], $array2[0]);.
答案 2 :(得分:0)
我对你的要求不是百分百肯定的。如果你想在一个你可以使用的函数中返回数组$ b的加拿大部分
return $b[2]
。
这将返回一个包含value => Canada的数组。如果要显示数组的内容,可以像这样使用var_dump函数。
var_dump($VaribleToDisplay);
var_dump也可以用于其他变量类型。
答案 3 :(得分:0)
由于您的数组包含由公用键索引的子数组,因此您不能使用array_merge,array_diff等,因为它们处理由键索引的数组(无子数组)。
您可以使用array_walk执行您想要的操作,但需要更多代码。考虑类似的事情:
$newVals = array();
function walker($sub, $key, $otherArray)
{
$found = false;
foreach($otherArray as $idx => $sub2)
{
if ($sub['value'] == $sub2['value'])
{
$found = true;
break;
}
}
if (!$found)
$newVals[] = $sub;
}
array_walk($a, 'walker', $b);
这不是特别快。如果您可以将输入数据更改为直接在数组中使用key =>值(而不是子数组),那么array_diff和array_merge将起作用并且速度会快得多。
即。你真的想重组这样的数据:
$a = array( 'America', 'Australia', 'Canada' );
或类似的东西。
答案 4 :(得分:0)
为什么你要设置你的数组就像选择什么?
$a = array('countries'=> array('America', 'England', 'Australia'));
$b = array('countries'=> array('America', 'England', 'Canada'));
array_diff($b['countries'], $a['countries']);