javascript

1133 经验值

谢谢 Jelly 的解答!结果很完美,正是我希望的!

但我不知道还有 combine 这个方法!

我试着 google 了一下,也没有找到它用法说明。

能不能解释一下 combine 呢?

或者是参考连接也可以!

$table = [
    ['AAA', 'BBB', 'CCC', 'DDD', 'EEE'],
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10],
    [11, 12, 13, 14, 15]
];

将上面的配列转化成为:

[
    [
        "AAA"=> 1,
        "BBB"=> 2,
        "CCC"=> 3,
        "DDD"=> 4,
        "EEE"=> 5
    ],
    [
        "AAA"=> 6,
        "BBB"=> 7,
        "CCC"=> 8,
        "DDD"=> 9,
        "EEE"=> 10
    ],
    [
        "AAA"=> 11,
        "BBB"=> 12,
        "CCC"=> 13,
        "DDD"=> 14,
        "EEE"=> 15
    ]
]

折腾了一会,没做出来。

请帮忙给个解法,先谢谢了!

对,这个结就是我想要的。太感谢了!
哎, 原来就差一点点了。
就是没有想到groupBy可以设置复数条件。

关于DB中的groupBy问题

表名为 items 中的数据是:

['type'=> 0, 'item'=> 'A', 'amount'=> 1, 'price'=> 5],
['type'=> 0, 'item'=> 'B', 'amount'=> 1, 'price'=> 7],
['type'=> 1, 'item'=> 'A', 'amount'=> 2, 'price'=> 10],
['type'=> 0, 'item'=> 'A', 'amount'=> 1, 'price'=> 5],
['type'=> 1, 'item'=> 'B', 'amount'=> 5, 'price'=> 35],

问题: 求出item值相同,type值也相同时,amount的总和。

一个条件时的写法:

DB::table('items')
->select(DB::raw('item, sum(amount) as total'))
->groupBy('item')
->get();

请问复数条件时应该怎么写?

哇!

function ($item)  use ($table) { }

还可以这样写啊!真的是太赞了!
谢谢指点。

关于使用Collection时出现的小问题

$table = [
    'A'=> 'a',
    'B'=> 'b',
    'C'=> 'c',
    'D'=> 'd',
    'E'=> 'e',
];

$list = ['A', 'C', 'E'];

实现的功能是:

1.查找出$table中的键,在$list中出现的位置。
2.当$table中的键不存在于$list中时,则什么都不返回。

结果:
  $result = [0, 2, 4];

我的代码是:

public function test () {
    
    $table = [
        'A'=> 'a',
        'B'=> 'b',
        'C'=> 'c',
        'D'=> 'd',
        'E'=> 'e',
    ];

    $list = ['A', 'C', 'E'];

    $result = collect($table)->map(function ($item, $key) {
        return collect($list)->search($key);
    });

    dd($result);
}

执行后报出的错误是:

Undefined variable: list

我的问题是:为什么找不到变量$list呢?

谢谢您的热心回复。
貌似使用 $collection->chunk(500); 速度上会快了一点吧?!(笑)
关于 collection 的用法,还有一个小问题想请教您。
我一会发帖子,希望您能帮我解答。

Eloquent 批量更新多条记录(存在时update,不存在时insert)

<font color="red"> 不是对一条记录多个字段批量赋值, </font>

类似 批量插入:

DB::table('users')->insert(array(
  array('email' => '[email protected]', 'name' => 'zhangsan', 'age'=> 0),
  array('email' => '[email protected]', 'name' => 'wangwu', 'age'=> 0),
  ...
));

有没有类似的语句:

DB::table('users')->update( array(
  array('email' => '[email protected]', 'name' => 'zhangsan', 'age'=> 20),
  array('email' => '[email protected]', 'name' => 'wangwu', 'age'=> 25),
  array('email' => '[email protected]', 'name' => 'chenliu', 'age'=> 50),
  ...
) , 'email' );

实现的功能是:
1.查询条件存在时,批量更新原数据;
例:
email='[email protected]'时, 'age'修改为 20,
email='[email protected]'时, 'age'修改为 25,
...

2.查询条件不存在时,批量插入数据。
例:
email='[email protected]'时, 'age'修改为 50,
...

我的代码是:

public function updateOrCreate (Request $request) {
  
  $insert_array = [];

  $datas = $request->all();

  foreach ($datas as $key=> $data) {
    $user = User::where('email', $data['email'])->first();
    if ($user) {
        // 更新原数据
        $user->email = $data['email'];
        $user->age = $data['age'];
        $user->save();
    } else {
        $insert_array[] = $data;
    }
  }
  
  // 批量插入数据
  User::insert($insert_array);
}

以上的代码,在更新数据为千笔以上时,就出现性能问题了!

求教,有没有更好的解决方法呢?

请多指点。