ThinkPHP6的 flip 方法

项目场景:

在ThinkPHP 版本6.0.9 中使用 flip方法,交换数据中的键和值

问题描述:

//控制器
$res=Db::table('user')->where('id',1)->find();
$res->flip();
//或
$res=Db::table('user')->where('id',1)->select();
$res->flip();

会提示错误:Call to a member function flip() on array
或 array_flip(): Can only flip string and integer values, entry skipped

原因分析:

由原代码可以看出,该方法使用 PHP函数array_flip(array); 用于反转/交换数组中的键名和对应关联的键值,该方法只支持一维数组,显然 select() 肯定是不行的,然而find() 也是不行的,因为 $this->items 会提示错误 Call to a member function flip() on array,所以觉得这个方是有问题的。

//vendor\topthink\think-helper\src\Collection.php
    /**
     * 交换数组中的键和值
     *
     * @access public
     * @return static
     */
    public function flip()
    {
        return new static(array_flip($this->items));
    }

解决方案:

重写ThinkPhp6 flip 方法

    /**
     * 交换数组中的键和值
     *
     * @access public
     * @return static
     */
    public function flip()
    {
        foreach ($this->items as $k=>$item) {
            $res[$k]=array_flip($item);
        }
        return new static($res);
    }

总结:

不推荐修改ThinkPHP6 的核心方法,但没有找到具体的原因,如果有更好的方法,望指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值