Php 如果ID相同,如何逐个删除项目?

Php 如果ID相同,如何逐个删除项目?,php,laravel,Php,Laravel,我正在开发购物车,当我添加两个相同ID的项目时,当我单击删除其中一个项目时,它会删除两个项目。如何逐一删除?我和拉威尔一起发展 这是删除功能: public function delete(Request $request, $id) { $products = session('cart'); foreach ($products as $key => $value) { if ($value['id'] == $id) {

我正在开发购物车,当我添加两个相同ID的项目时,当我单击删除其中一个项目时,它会删除两个项目。如何逐一删除?我和拉威尔一起发展

这是删除功能:

public function delete(Request $request, $id)
{
    $products = session('cart');
    foreach ($products as $key => $value)
    {
        if ($value['id'] == $id)
        {
            unset($products [$key]);
        }
    }

    $request->session()->remove('cart');
    Session::forget('ticket');
    $request->session()->put('cart',$products);

    flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
    return redirect()->back();
}

由于您没有停止循环,因此最终将取消设置所有具有该ID的产品。请执行以下操作:

public function delete(Request $request, $id)
{
    $products = session('cart');
    foreach ($products as $key => $value) {
        if ($value['id'] == $id) {
            unset($products [$key]);
            break;
        }
    }

    $request->session()->remove('cart');
    Session::forget('ticket');
    $request->session()->put('cart',$products);

    flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
    return redirect()->back();
}
但是,由于您也在项目上添加了额外的文本,我建议您更具体地说明需要删除的项目:

public function delete(Request $request, $id, $text)
{
    $products = session('cart');
    foreach ($products as $key => $value) {
        if ($value['id'] == $id && $value['text'] == $text) {
            unset($products[$key]);
            break;
        }
    }

    $request->session()->remove('cart');
    Session::forget('ticket');
    $request->session()->put('cart',$products);

    flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
    return redirect()->back();
}

第二个建议只是我的猜测。想法是您的真实项目
$id
由数据库id和文本组成,这两个id应该唯一地标识产品。

由于您没有停止循环,您最终将
取消设置所有具有该id的产品。请执行以下操作:

public function delete(Request $request, $id)
{
    $products = session('cart');
    foreach ($products as $key => $value) {
        if ($value['id'] == $id) {
            unset($products [$key]);
            break;
        }
    }

    $request->session()->remove('cart');
    Session::forget('ticket');
    $request->session()->put('cart',$products);

    flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
    return redirect()->back();
}
但是,由于您也在项目上添加了额外的文本,我建议您更具体地说明需要删除的项目:

public function delete(Request $request, $id, $text)
{
    $products = session('cart');
    foreach ($products as $key => $value) {
        if ($value['id'] == $id && $value['text'] == $text) {
            unset($products[$key]);
            break;
        }
    }

    $request->session()->remove('cart');
    Session::forget('ticket');
    $request->session()->put('cart',$products);

    flash()->success('Prekė buvo sėkmingai pašalinta iš krepšelio.');
    return redirect()->back();
}

第二个建议只是我的猜测。想法是你真正的物品
$id
由数据库id和文本组成,这两个标识应唯一标识产品。

为什么有两个标识相同的项目….?如何定义两个标识之间的差异?取消设置后执行
中断
,这将删除具有该标识的第一个产品,但通常具有唯一标识和数量,而不是具有相同标识的多个产品。(只是想一想).Hmm…商店里有一个项目。我可以在上面写文本。因此我可以在上面添加不同的文本。但是它们的id与数据库中的相同。你必须找到一种方法,将它们以不同的id-s插入数据库中,因为你会面临这个问题。为什么你有两个具有相同id的项目…?你如何定义这两个id-s之间的差异?a
break
在您取消设置后,这将删除第一个具有该ID的产品,但其典型特征是具有唯一ID和数量,而不是具有相同ID的多个产品。(请仔细考虑).Hmm…商店里有一件物品。我可以在上面写文字。因此我可以在上面添加不同的文字。但是它们的id与数据库中的相同。你必须找到一种方法,以不同的id-s将它们插入数据库中,因为你将面临这个问题