【问题标题】:how to compare two dimensional array with single dimensional array如何比较二维数组和一维数组
【发布时间】:2017-08-19 16:18:46
【问题描述】:

为了清楚起见假设我有一个这样的数组

Array
(
    [0] => 1234567
    [1] => 1
    [2] => 189818006457
    [3] => 3
    [4] => 10069992244808
    [5] => 2
    [6] => 100699922448
    [7] => 5
    [8] => 123454b
    [9] => 6
    [10] => 12345674b234
    [11] => 2
    [12] => 10
    [13] => 3
    [14] => 100699922
    [15] => 1
    [16] => 1006999
    [17] => 30
    [18] => 9
    [19] => 36
    [20] => 34
    [21] => 45
    [22] => 567
    [23] => 3
    [24] => 44
    [25] => 3
    [26] => 6788
    [27] => 15
    [28] => 189818006457371
    [29] => 17
    [30] => 123RT454b
    [31] => 5
)

我想将它与下面的数组进行比较。这样当下面的子数组1的值与上面的数组的值匹配时,系统会将上面一维数组中匹配值之前的值打印成一组。它还将检查下面 sub-array2 中的值是否与上面数组的值匹配,系统将在另一个 group-2 中打印上面一维数组中匹配值之前的值,依此类推。

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 3
            [2] => 2
            [3] => 5
            [4] => 6
            [5] => 2
            [6] => 3
            [7] => 1
            [8] => 3
        )
[2] => Array
    (
        [0] => 30
        [1] => 36
        [2] => 45
    )

[1] => Array
    (
        [0] => 15
        [1] => 17
    )

)

对不起,我是 php 新手,但我必须做这个项目。谢谢

【问题讨论】:

  • 问题不清楚。
  • 您的问题只是您自己想清楚,但对其他人来说没有意义,请清楚地更新您的问题,您想要的输出是什么
  • 为什么子数组有一些重复的值?这应该如何影响结果?
  • 它不应该以任何方式影响结果

标签: php sql arrays multidimensional-array


【解决方案1】:

我建议先重新排列一下你拥有的数据:

  • 为子数组的数组创建一个映射,对于给定的值将返回组的编号。

  • 将一维输入数组变成对数组

然后您可以迭代对数组并在地图中执行查找。

代码如下:

$input = [ 
    '1234567', 1, '189818006457', 3, '10069992244808', 2,
    '100699922448', 5, '123454b', 6, '12345674b234', 2,
    '10', 3, '100699922', 1, '1006999', 30, '9', 36,
    '34', 45, '567', 3, '44', 3, '6788', 15,
    '189818006457371', 17, '123RT454b', 5
];

$groups = [
    [1, 3, 2, 5, 6, 2, 3, 1, 3], 
    [30, 36, 45], 
    [15, 17]
];

// First create an associative array that maps a given value to a group number
$map = [];
foreach ($groups as $group => $subarray) {
    $map = $map + array_combine($subarray, array_fill(0, count($subarray), $group));
}
// Now iterate pairs of the input data
foreach (array_chunk($input, 2) as list($v, $k)) {
    $result[$map[$k]][] = $v ;
}

$result 变量将具有三个子数组,每组一个:

[
    [
        '1234567', '189818006457', '10069992244808',
        '100699922448', '123454b', '12345674b234',
        '10', '100699922', '567', '44', '123RT454b'
    ], [
        '1006999', '9', '34'
    ], [
        '6788', '189818006457371'
    ]
]

【讨论】:

  • 但是如果我可能会问,我如何打印结果看起来像上面的@trincot
  • 哦,谢谢它正在工作。我使用 print_r 打印结果
猜你喜欢
  • 2021-11-24
  • 2021-07-22
  • 2013-05-19
  • 2017-07-17
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多