循环添加数组中的值

时间:2019-05-01 15:26:14

标签: php arrays laravel eloquent

我正在处理laravel项目,该项目可在满足某些条件时将值存储到循环存储的数据库条目中。

如果该条目是第一次,则它首先创建一个数组,并为其添加一个值。从此以后,它将重新调用数组并继续向其中添加值。

if(is_null($lead->shown_to)) {
    $a = array();
    array_push($a, "lead 1");
    $lead->shown_to = serialize($cart);
    $lead->save();
} else {
    $a=unserialize($lead->shown_to);
    array_push($a, "lead 2");
    $lead->shown_to = serialize($a);
    $lead->save();
}

能够创建数组并向其重复添加不同的元素。

有没有一种方法可以首先检查元素是否存在。如果是这样,就继续前进,否则添加它?

谢谢。

4 个答案:

答案 0 :(得分:0)

有两种方法可以使用。

您可以首先使用数据库中的列在数据库上查找值(如果存在),例如:

$result = Model::where( 'column', 'value' );

if ( $result ) {
  // update already exists
} else {
  // create one
}


// Retrieve flight by name, or create it if it doesn't exist...
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);

// Retrieve by name, or instantiate...
$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);

这也取决于您要查找的内容,因为firstOrCreate将值持久保存到数据库中,其中firstOrNew只是创建一个需要调用save()的新实例

答案 1 :(得分:0)

要检查数组中是否存在值,可以使用array_search()。如果存在,它将返回该值。如果不是,则返回false

if(!array_search('lead 2', $a)) {
    // array does't has 'lead 2' so,
    array_push('lead 2', $a);
}

答案 2 :(得分:0)

在Laravel中,我将充分利用Collections,因为它们有很多有用的方法可以使用。

我会做这样的事情:

选项1

//Depending on the value of $lead->show, initialize the cart variable with the serialization of the attribute or and empty array and transform it to a collection.

$cart = collect($lead->shown_to ? unserialize($lead->shown_to) : []);

//Ask if the collection doesn't have the given value. If so, added it.
if (!$cart->contains($your_value)) {
    $cart->push($your_value);
}

//Convert to array, serialize and store
$lead->shown_to = serialize($cart->toArray());
$lead->save();

选项2

//Depending on the value of $lead->show, initialize the cart variable with the serialization of the attribute or and empty array and transform it to a collection.

$cart = collect($lead->shown_to ? unserialize($lead->shown_to) : []);

//Always push the value
$cart->push($your_value);

//Get the unique values, convert to an array, serialize and store
$lead->shown_to = serialize($cart->unique()->toArray());
$lead->save();

您可以使用这些收藏集获得更多创意,并且在Laravel上阅读效果更好

答案 3 :(得分:0)

我认为您可以使用updateOrCreate,如果不存在,它将立即创建,如果存在,将对其进行更新,因此您可以继续将值分配给show_to属性

$lead= App\Lead::updateOrCreate(
    ['name' => 'Lead 1'],
    ['shown_to' => serialize($a)]
);

如果您希望保留现有的showd_to以便更好地使用json数据,那么您可以这样做

$lead= App\Lead::updateOrCreate(
        ['name' => 'Lead 1'],
        ['shown_to' => json_encode(array_push(json_decode($a), $newData))]
    );