簡體   English   中英

我想從數組中分離出值和鍵

[英]I would like to seperate value and key from array

我想從該數組(PHP Laravel)中獲取id和parent_id的值來更新數據庫。

stdClass Object( [item_id] => [parent_id] => [depth] => 0 [left] => 1 [right] => 12)
stdClass Object( [id] => 1 [parent_id] => [depth] => 0 [left] => 2 [right] => 3)
stdClass Object( [id] => 2 [parent_id] => [depth] => 0 [left] => 4 [right] => 5)
stdClass Object( [id] => 4 [parent_id] => [depth] => 0 [left] => 6 [right] => 7)
stdClass Object( [id] => 5 [parent_id] => [depth] => 0 [left] => 8 [right] => 11)
stdClass Object( [id] => 6 [parent_id] => 5 [depth] => 1 [left] => 9 [right] => 10)

控制器:

public function updatemenusort(Request $request)
{
     $menus=json_decode($request->input('menu'));

     foreach($menus as $menu)
     {
        print_r($menu);
     }
}

視圖中的ajax:

$('#toArray').click(function (e) {
    arraied = $('ol.sortable').nestedSortable('toArray', {startDepthCount: 0});
    //arraied = dump(arraied);
    arraied = JSON.stringify(arraied);
    // ajax strt

    alert(arraied);
    $.ajax({
        type: 'POST',
        url: "{{url('menus/sortmenu')}}",
        dataType: 'json',
        data: {'menu': arraied, '_token': _token},
        success: function (data) {},
        error: function (data) {}
    });
});

我正在嘗試使用插件來創建可拖動和可排序的菜單。
上面的數組是我的控制器的(print_r($menu);)的輸出。

您已經遍歷了對象數組,因此現在將$menu設置為單個對象實例。

因此,只需將數據作為對象及其屬性進行訪問。

public function updatemenusort(Request $request)
{
     $menus=json_decode($request->input('menu'));

     foreach($menus as $menu)
     {
        echo $menu->id;
        if ( isset($menu->parent_id) {
            echo $menu->parent_id;
        } else {
            echo 'No parent Id';
        }
        // etc etc

        // In your case I assume you would want to
        // build a query here and not just echo data,
        // but thats just a FLOC
     }
}

這可能對您有幫助

public function updatemenusort(Request $request)
{
    foreach($request->menu as $menu)
    {
        // if you are finding by id 

        $model = ModelName::find($menu['id']); // can use findOrFail()

        // checking if not null 
        if (!is_null($model)) { // remove if using findOrFail()
            $model->id = $menu['id'];
            $model->parent_id = $menu['parent_id'];
            $model->save();
        }

        /*---------------------or---------------------*/

        // creating new but here you might get duplicate id error 

        $model = new ModelName;
        $model->id = $menu['id'];
        $model->parent_id = $menu['parent_id'];
        $model->save();

    }
}


先前的建議與以上無關

您可以array_column()使用array_column() 如果要在新數組中使用idparent_id

例如

$ids = array_column($menus, 'id'); // for id
$parentId = array_column($menus, 'parent_id'); // for parent id

建議

我不知道你為什么要使用arraied = JSON.stringify(arraied); 只是按原樣傳遞對象並在控制器中

//$menus=json_decode($request->input('menu')); // no need to use json_decode() if you are doing to get as object then you can do like 

$menus= $request->input('menu');

foreach($menus as $menu)
{
    $menu = (object) $menu; // you can cast here
    print_r($menu);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM