你好,我正在尝试比较两个具有不同信息的 PHP 数组,但什么也没有。
Array
(
[B1] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
)
[B2] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
[B3] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
)
[B4] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
)
Array
(
[1] => B4
[2] => B3
[3] => B1
)
Array
(
[B1] => Array
(
[0] => ok
[1] => ok
[2] => ok
[3] => ok
[4] => ok
[5] => ok
[6] => ok
[7] => ok
)
[B2] => Array
(
[0] => null
[1] => null
[2] => null
[3] => null
)
[B3] => Array
(
[0] => ok
[1] => ok
[2] => ok
[3] => ok
[4] => ok
[5] => ok
[6] => ok
[7] => ok
)
[B4] => Array
(
[0] => ok
[1] => ok
[2] => ok
[3] => ok
[4] => ok
[5] => ok
[6] => ok
[7] => ok
[8] => ok
)
)
我已经尝试了各种 PHP 函数,但它只是返回不是结果;
希望有人能帮忙,谢谢;
我尝试了各种 PHP 函数,例如 in_array 和 stristr 来获取差异,但它返回不同的结果和空数组。
解决方案:
<?php
//fill the first array
$a = [
"B1" => [1, 2, 3, 4, 5, 6, 7, 8],
"B2" => [1, 2, 3, 4],
"B3" => [1, 2, 3, 4, 5, 6, 7, 8],
"B4" => [1, 2, 3, 4, 5, 6, 7, 8, 9],
];
//fill the second array
$b = ["B1", "B3", "B4"];
//loop through first array
foreach ($a as $aKey => $val) {
//count the length of arrays
$arrLength = count($a[$aKey]);
//find the key from second array
$found = false;
foreach ($b as $bKey) {
if ($aKey == $bKey) {
$found = true;
break;
}
}
//loop through inner arrays and
//set the null value or 'ok' text for every element
for ($i = 0; $i < $arrLength; $i++) {
if ($found) {
$a[$aKey][$i] = "ok";
} else {
$a[$aKey][$i] = null;
}
}
}
print_r($a);
?>
结果是:
Array
(
[B1] => Array
(
[0] => ok
[1] => ok
[2] => ok
[3] => ok
[4] => ok
[5] => ok
[6] => ok
[7] => ok
)
[B2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
)
[B3] => Array
(
[0] => ok
[1] => ok
[2] => ok
[3] => ok
[4] => ok
[5] => ok
[6] => ok
[7] => ok
)
[B4] => Array
(
[0] => ok
[1] => ok
[2] => ok
[3] => ok
[4] => ok
[5] => ok
[6] => ok
[7] => ok
[8] => ok
)
)
定义: 该解决方案将结果存储在第一个数组中,这意味着第一个数组中的数据将丢失。如果要保留数据,可以检查此答案以将数据复制到另一个数组: https://stackoverflow.com/a/17729234/10109156
或者,您可以创建一个新数组来存储结果:
<?php
//fill the first array
$a = [
"B1" => [1, 2, 3, 4, 5, 6, 7, 8],
"B2" => [1, 2, 3, 4],
"B3" => [1, 2, 3, 4, 5, 6, 7, 8],
"B4" => [1, 2, 3, 4, 5, 6, 7, 8, 9],
];
//fill the second array
$b = ["B1", "B3", "B4"];
$result = [];
//loop through first array
foreach ($a as $aKey => $val) {
//count the length of arrays
$arrLength = count($a[$aKey]);
//find the key from second array
$found = false;
foreach ($b as $bKey) {
if ($aKey == $bKey) {
$found = true;
break;
}
}
//create an empty inner array
$result[$aKey] = [];
//loop through inner arrays and
//set the null value or 'ok' text for every element
for ($i = 0; $i < $arrLength; $i++) {
if ($found) {
$result[$aKey][$i] = "ok";
} else {
$result[$aKey][$i] = null;
}
}
}
print_r($result);
?>
结果是一样的。
<?php
$array = array(
"B1" => array(1, 2, 3, 4, 5, 6, 7, 8),
"B2" => array(1, 2, 3, 4),
"B3" => array(1, 2, 3, 4, 5, 6, 7, 8),
"B4" => array(1, 2, 3, 4, 5, 6, 7, 8, 9),
);
foreach ($array as $key => $subarray) {
if (count($subarray) == 8) {
$array[$key] = array_fill(0, 8, "ok");
} else {
$array[$key] = array_fill(0, count($subarray), null);
}
}
print_r($array);
尝试使用此代码