【问题标题】:marge two php array with folloging condition合并两个具有以下条件的php数组
【发布时间】:2018-11-03 16:55:34
【问题描述】:

我有两个数组学生和分数。需要一个像marks_sheet这样的输出数组。删除标记数组中不存在的所有数据并插入一个新的字段标记。 // 这个数组的名字 students

Array    
    (
        [0] => Array
            (
                [userId] => user1
                [name] => Suman Mandal
                [age] => 20    

            )
        [1] => Array
            (

                [userId] => user2
                [name] => Amit Halder
                [age] => 30

            )
        [2] => Array
            (

                [userId] => user3
                [name] => Asif Rahman
                [age] => 25

            )
        [3] => Array
            (

                [userId] => user4
                [name] => Gopal Ghosh
                [age] => 21

            )
    )

// 这个数组的名称标记

 Array   
    (
        [0] => Array
            (
                [userId] => user1 
                [marks]=>80 

            )
        [1] => Array
            (

                [userId] => user3  
                [marks]=>90          
            )

    )

我需要这样的输出: // 这个数组的名称 ma​​rks_sheet

 Array   
    (
        [0] => Array
            (
                [userId] => user1 
                [name] => Suman Mandal
                [age] => 20
                [marks]=>80 

            )
        [1] => Array
            (

                [userId] => user3  
                [name] => Asif Rahman
                [age] => 25
                [marks]=>90          
            )

    )

我对php有一点了解。可能这很容易,但我很难解决它......请帮助我

【问题讨论】:

  • 这和sql有什么关系?
  • @Strawberry OP 很困惑,并在 PHP 中显示结果集,而不是表格形式的 MySQL 数据,这是我们真正想看到的。
  • 对不起...朋友..我的问题有一点我检查过的错误
  • @TimBiegeleisen 我认为不是
  • 只需检查此链接
    stackoverflow.com/questions/17850353/…">检查此链接您必须得到解决方案

标签: php codeigniter


【解决方案1】:

您可以在userId 索引数组上使用array_replace_recusrive

首先使用array_column 通过userId 对数组进行索引。

然后使用array_replace_recursive合并数组中的值,并保留两个数组集的键索引。

最后使用array_intersect_key 只返回$marks 数组中的数组值。

示例https://3v4l.org/adrYV

$students = array_column($students, null, 'userId');
$marks = array_column($marks, null, 'userId');
$marks_sheet = array_intersect_key(array_replace_recursive($students, $marks), $marks);

结果

Array
(
    [user1] => Array
        (
            [userId] => user1
            [name] => Suman Mandal
            [age] => 20
            [marks] => 80
        )

    [user3] => Array
        (
            [userId] => user3
            [name] => Asif Rahman
            [age] => 25
            [marks] => 90
        )

)

如果您需要不被userId 索引的最终结果,您可以使用array_values,它将重新索引数组。

$marks_sheet = array_values(
    array_intersect_key(array_replace_recursive($students, $marks), $marks)
);

结果

Array
(
    [0] => Array
        (
            [userId] => user1
            [name] => Suman Mandal
            [age] => 20
            [marks] => 80
        )

    [1] => Array
        (
            [userId] => user3
            [name] => Asif Rahman
            [age] => 25
            [marks] => 90
        )

)

或者,您可以遍历标记和学生以构建您的标记表数组。

示例https://3v4l.org/Xmg3a

$marks_sheet = [];
foreach ($marks as $mark) {
    foreach ($students as $student) {
        if ($student['userId'] === $mark['userId']) {
            $mark_sheet = $student;
            foreach ($mark as $key => $value) {
                $mark_sheet[$key] = $value;
            }
            $marks_sheet[] = $mark_sheet;
        }
    }
}

结果

Array
(
    [0] => Array
        (
            [userId] => user1
            [name] => Suman Mandal
            [age] => 20
            [marks] => 80
        )

    [1] => Array
        (
            [userId] => user3
            [name] => Asif Rahman
            [age] => 25
            [marks] => 90
        )

)

【讨论】:

  • 谢谢……亲爱的……你解决了我的问题……爱你……@fyrye
猜你喜欢
  • 2016-03-22
  • 2014-03-04
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2021-12-10
  • 2020-07-07
  • 2020-01-19
  • 2016-10-19
相关资源
最近更新 更多