【问题标题】:I would like to seperate value and key from array我想从数组中分离值和键
【发布时间】:2018-02-27 22:25:21
【问题描述】:

我想从这个数组(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) {}
    });
});

我正在尝试使用this 插件来创建可拖动和可排序的菜单。
上面的数组是我的控制器的(print_r($menu);) 的输出。

【问题讨论】:

  • @ThomasMoors 在对象上进行 foreach 也很容易
  • @ThomasMoors 除非在这种情况下,OP 没有使用 $menu_key

标签: javascript php arrays ajax laravel


【解决方案1】:

您已经对对象数组进行了迭代,所以现在您将 $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
     }
}

【讨论】:

  • 我做到了。但是错误..(1/1) ErrorException 未定义属性:stdClass::$id
【解决方案2】:

这可能对你有帮助

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()。如果你想要 idparent_id 在新数组中。

举例

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

建议

我不知道你为什么使用 arraied = JSON.stringify(arraied); 只是在 controller 中传递对象

//$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);
}

【讨论】:

  • prntscr.com/gnc2j4 prnt.sc/gnc20k prnt.sc/gnc2bv prnt.sc/gnc344 prntscr.com/gnc2wq . 我按照你说的做了,但我没有完全理解你,请检查屏幕短裤我是初学者
  • 为什么你是alerting对象,如果你想看到结果那么你可以使用console.log(arraied)
  • 您希望 idparent_id 在一个数组中,如 ["id" => 6, "parent_id" => 5] 或单独如 $ids = [1,2,3,4,5,6]$parentIds = [5] ;
  • 很简单的更新答案。
猜你喜欢
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2018-06-19
  • 2018-12-08
  • 1970-01-01
  • 2022-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多