Laravel 中的数组推送

Posted

技术标签:

【中文标题】Laravel 中的数组推送【英文标题】:Array Push in Laravel 【发布时间】:2012-09-23 00:27:30 【问题描述】:

我正在尝试将新数组项推送到现有数组变量中,该变量包含数据库中的项。我想要做的是在该数组的末尾添加一个名为“Others”的新项目,并将其显示为视图中的选择下拉列表,其中包含数据库中的所有项目,并在最后选择“Others”项目我在控制器中手动添加。

这是我尝试做的:

    $competition_all = Competition::all();
    $newCompete = array('name'=>'Others');
    array_push($competition_all, $newCompete);

    $this->competition_games = array('Competition');

    foreach ($competition_all as $competition_games) 
        $this->competition_games[$competition_games->name] = $competition_games->name;
    

它说的是这样的

未处理的异常

消息:

试图获取非对象位置的属性:

C:\xampp\htdocs\khelkheladi\khelkheladi\application\controllers\register.php 在第 104 行

在我的数据库中,竞赛有这种类型的列结构

->id
->year
->place
->name
->created_at
->updated_at

按照给定的顺序。

我想要做的是没有实际在数据库中插入一个项目,只是静态地在视图中的选择标签中显示其他选择项目。如何插入这样的新项目而不实际将其插入数据库但仅显示在视图中?

我之前通过检索数据库项目得到的输出是这样的

<select>
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
  <option value="4">Value 4</option>
</select> 

我喜欢做的是这样的

<select>
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
  <option value="4">Value 4</option>
  <option value="5">Others</option>
</select> 

【问题讨论】:

您已成为这里的会员一年多。现在是学习如何使用编辑器并停止发布格式错误的内容以供他人修复的时候了。缩进你的代码块。 好的,我纠正了我的错误,但我相信 php 代码已经缩进了。感谢您的评论,以后不会再发生了。 【参考方案1】:

那是因为您要向数组的最后一个元素添加一个非对象。

这里我假设你得到一个具有 name 属性的对象数组

$competition_all = Competition::all();

在这里,您将 key=>value 对添加到 objects 数组的最后一个元素

$newCompete = array('name'=>'Others');
array_push($competition_all, $newCompete);

在这里,您遍历对象数组,当涉及到最后一个元素时,“$competition_games->name”没有名称属性

foreach ($competition_all as $competition_games) 
            $this->competition_games[$competition_games->name] = $competition_games->name;
        

尝试为它添加一个标准类,例如:

$newCompete = new StdClass();
$newCompete->name = 'Others';
array_push($competition_all, $newCompete);

【讨论】:

谢谢你的回答,现在我有更多的知识,非常感谢你【参考方案2】:

“干净”的方法是创建Competition 的实例而不将其提交到数据库,然后使用额外的实例再次重复您的循环。

但是,这里您似乎只是在生成一个列表,因此应该足以更快地添加到最终列表中:

// Empty array
$this->competition_games = [ 0 => 'Others' ];

foreach (Competition::all() as $game) 
    $this->competition_games[$game->id] = $game->name;

使用 0(或 -1)作为不存在的 ID。

【讨论】:

以上是关于Laravel 中的数组推送的主要内容,如果未能解决你的问题,请参考以下文章

带有队列的laravel中的android和ios推送通知

Laravel将变量传递给多选下拉数组到字符串转换错误

AWS 中的 Laravel WebSockets 推送器

在刀片中显示 laravel DB::select 数组

需要 Laravel 移动应用的推送服务

使用 Laravel 的 AWS SNS 推送通知