函数模拟数组上的左联接在PHP中无法正常工作 [英] function to simulate left join on array not working properly in PHP

查看:72
本文介绍了函数模拟数组上的左联接在PHP中无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个这样的数组:

$left = [
    ['UserID' => 6835406],
    ['UserID' => 8418097],
];

$right = [
    ['Amount' => 0.00, 'UserID' => 6835406],
    ['Amount' => 0.00, 'UserID' => 8418097]
];

我正在使用此功能基于UserID领域在数组上执行左连接:

I'm using this function to perform a left join on the arrays based on the UserID feild :

function left_join_array($left, $right, $left_join_on, $right_join_on = NULL){
    $final= array();

    if(empty($right_join_on))
        $right_join_on = $left_join_on;

    foreach($left AS $k => $v){
        $final[$k] = $v;
        foreach($right AS $kk => $vv){
            if($v[$left_join_on] == $vv[$right_join_on]){
                foreach($vv AS $key => $val)
                    $final[$k][$key] = $val;
            } else {
                foreach($vv AS $key => $val)
                    $final[$k][$key] = NULL;           
            }
        }
    }
   return $final;
}

我这样调用该函数:

$out = $this->left_join_array($left,$right,'UserID','UserID');
echo "<pre>";print_r($out);

这是输出:

Array
(
    [0] => Array
        (
            [UserID] => 
            [Amount] => 
        )

    [1] => Array
        (
            [UserID] => 8418097
            [Amount] => 0.00
        )

)

但是所需的输出应该是这样的:

but the desired output should have been like this :

 Array
    (
        [0] => Array
            (
                [UserID] => 6835406
                [Amount] => 0.00
            )

        [1] => Array
            (
                [UserID] => 8418097
                [Amount] => 0.00
            )

    )

我的代码有什么问题? 为什么不提供所需的输出. 任何建议都会有所帮助.

What's wrong with my code? Why doesn't it give the desired output. Any suggestions would be helpful.

推荐答案

我不知道为什么要编写这么长的代码,如下所示:

I don't know why you did so long code, do like below:

$finalArray = array();
foreach($left as $lft){
    foreach($right as $rgt){
        if($lft['UserID']  == $rgt['UserID']){
           $finalArray[$lft['UserID']]['UserID'] = $lft['UserID'];
           $finalArray[$lft['UserID']]['Amount'] = (isset($rgt['Amount']) ? $rgt['Amount'] : NULL);
           break;
        }else{
            $finalArray[$lft['UserID']]['UserID'] = $lft['UserID'];
            $finalArray[$lft['UserID']]['Amount'] =  NULL;
        }
    }
}
$finalArray = array_values($finalArray);

var_dump($finalArray);

输出:- https://3v4l.org/TCnBb

您也可以使用功能方法: https://3v4l.org/aLWij

You can go for functional approach too:https://3v4l.org/aLWij

这篇关于函数模拟数组上的左联接在PHP中无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆