foreach循环中的两个数组反向搜索并返回null

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

你好,我正在尝试比较两个具有不同信息的 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
        )

)

  • arrays 2 不反转
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 arrays multidimensional-array compare
2个回答
0
投票

解决方案:

<?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);
?>

结果是一样的。


0
投票
<?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);

尝试使用此代码

© www.soinside.com 2019 - 2024. All rights reserved.