PHP多段式数组拥有另一个多段式数组的所有子数组。

问题描述 投票:0回答:2

如何确保数组$b中的所有子数组都是$a的,尽管有数字键(0,1,2...等)。

$a = [
    0 => ['v' => 1, 'f' => 2],
    1 => ['v' => 144, 'f' => 443]
];

$b = [
    0 => ['v' => 1, 'f' => 2],
    1 => ['v' => 25, 'f' => 3],
    2 => ['v' => 144, 'f' => 443]
];

我的方法是在foreach里面加上foreach和多个if......很快就变得一团糟。

php multidimensional-array
2个回答
2
投票

array_diff()不幸的是,这只适用于一维。 但你可以 json_encode() 数组中的每个元素,然后比较... ...

$c = array_diff(array_map("json_encode", $a), array_map("json_encode", $b));

print_r($c);

与你的原始数据,因为它们都在第二个数组中,这就... ...

Array
(
)

把443改成4431

$a = [
    0 => ['v' => 1, 'f' => 2],
    1 => ['v' => 144, 'f' => 4431]
];

然后你会得到...

Array
(
    [1] => {"v":144,"f":4431}
)

密钥将与原始数据相同,但数据是JSON编码的(如果这真的很重要的话)。


0
投票

在这种情况下,你可以使用交集。

$a = [
    0 => ['v' => 1, 'f' => 2],
    1 => ['v' => 144, 'f' => 443]
];

$b = [
    0 => ['v' => 1, 'f' => 2],
    1 => ['v' => 25, 'f' => 3],
    2 => ['v' => 144, 'f' => 443]
];
$result = array_intersect($a, $b);
if($result == $a){
  echo '$b has all the value in $a';
}
© www.soinside.com 2019 - 2024. All rights reserved.