2014-12-05 3 views
3

У меня ошибка после удаления элемента из массива Laravel красноречивогоиндекса массива Перестановки Eloquent Laravel

Одно свойства имеет номер

foreach ($property->rooms as $key => $room) { 
    if ($room->type == 1 and $type ==1 and $room->price < $price->min or $room->price > $price->max) { 
      print_r($property->rooms); 
      unset($property->rooms[$key]); 
      //$array = array_values($property->rooms); doesn't work 
      print_r($property->rooms); 
     } 
    } 

Когда я закодировать это в JSON, массив преобразовать в объект не является массивом

Перед отключенном

Illuminate\Database\Eloquent\Collection Object 
(
[items:protected] => Array 
    (
     [0] => Room Object 
      (
       [table:protected] => rooms 
       [fillable:protected] => Array 
        (
         [0] => properties_id 
         [1] => price 
         [2] => is_available 
         [3] => type 
         [4] => description 
        ) 

       [connection:protected] => 
       [primaryKey:protected] => id 
       [perPage:protected] => 15 
       [incrementing] => 1 
       [timestamps] => 1 
       [attributes:protected] => Array 
        (
         [id] => 1 
         [properties_id] => 4 
         [price] => 450000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 2014-10-20 22:27:44 
         [type] => 1 
         [description] => 
        ) 

       [original:protected] => Array 
        (
         [id] => 1 
         [properties_id] => 4 
         [price] => 450000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 2014-10-20 22:27:44 
         [type] => 1 
         [description] => 
        ) 

       [relations:protected] => Array 
        (
        ) 

       [hidden:protected] => Array 
        (
        ) 

       [visible:protected] => Array 
        (
        ) 

       [appends:protected] => Array 
        (
        ) 

       [guarded:protected] => Array 
        (
         [0] => * 
        ) 

       [dates:protected] => Array 
        (
        ) 

       [touches:protected] => Array 
        (
        ) 

       [observables:protected] => Array 
        (
        ) 

       [with:protected] => Array 
        (
        ) 

       [morphClass:protected] => 
       [exists] => 1 
      ) 

     [1] => Room Object 
      (
       [table:protected] => rooms 
       [fillable:protected] => Array 
        (
         [0] => properties_id 
         [1] => price 
         [2] => is_available 
         [3] => type 
         [4] => description 
        ) 

       [connection:protected] => 
       [primaryKey:protected] => id 
       [perPage:protected] => 15 
       [incrementing] => 1 
       [timestamps] => 1 
       [attributes:protected] => Array 
        (
         [id] => 2 
         [properties_id] => 4 
         [price] => 350000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 2014-10-21 18:13:15 
         [type] => 1 
         [description] => 
        ) 

       [original:protected] => Array 
        (
         [id] => 2 
         [properties_id] => 4 
         [price] => 350000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 2014-10-21 18:13:15 
         [type] => 1 
         [description] => 
        ) 

       [relations:protected] => Array 
        (
        ) 

       [hidden:protected] => Array 
        (
        ) 

       [visible:protected] => Array 
        (
        ) 

       [appends:protected] => Array 
        (
        ) 

       [guarded:protected] => Array 
        (
         [0] => * 
        ) 

       [dates:protected] => Array 
        (
        ) 

       [touches:protected] => Array 
        (
        ) 

       [observables:protected] => Array 
        (
        ) 

       [with:protected] => Array 
        (
        ) 

       [morphClass:protected] => 
       [exists] => 1 
      ) 

     [2] => Room Object 
      (
       [table:protected] => rooms 
       [fillable:protected] => Array 
        (
         [0] => properties_id 
         [1] => price 
         [2] => is_available 
         [3] => type 
         [4] => description 
        ) 

       [connection:protected] => 
       [primaryKey:protected] => id 
       [perPage:protected] => 15 
       [incrementing] => 1 
       [timestamps] => 1 
       [attributes:protected] => Array 
        (
         [id] => 3 
         [properties_id] => 4 
         [price] => 250000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 0000-00-00 00:00:00 
         [type] => 1 
         [description] => 
        ) 

       [original:protected] => Array 
        (
         [id] => 3 
         [properties_id] => 4 
         [price] => 250000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 0000-00-00 00:00:00 
         [type] => 1 
         [description] => 
        ) 

       [relations:protected] => Array 
        (
        ) 

       [hidden:protected] => Array 
        (
        ) 

       [visible:protected] => Array 
        (
        ) 

       [appends:protected] => Array 
        (
        ) 

       [guarded:protected] => Array 
        (
         [0] => * 
        ) 

       [dates:protected] => Array 
        (
        ) 

       [touches:protected] => Array 
        (
        ) 

       [observables:protected] => Array 
        (
        ) 

       [with:protected] => Array 
        (
        ) 

       [morphClass:protected] => 
       [exists] => 1 
      ) 

    ) 

)

После того, как в отключенном

Illuminate\Database\Eloquent\Collection Object 
(
[items:protected] => Array 
    (
     [1] => Room Object 
      (
       [table:protected] => rooms 
       [fillable:protected] => Array 
        (
         [0] => properties_id 
         [1] => price 
         [2] => is_available 
         [3] => type 
         [4] => description 
        ) 

       [connection:protected] => 
       [primaryKey:protected] => id 
       [perPage:protected] => 15 
       [incrementing] => 1 
       [timestamps] => 1 
       [attributes:protected] => Array 
        (
         [id] => 2 
         [properties_id] => 4 
         [price] => 350000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 2014-10-21 18:13:15 
         [type] => 1 
         [description] => 
        ) 

       [original:protected] => Array 
        (
         [id] => 2 
         [properties_id] => 4 
         [price] => 350000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 2014-10-21 18:13:15 
         [type] => 1 
         [description] => 
        ) 

       [relations:protected] => Array 
        (
        ) 

       [hidden:protected] => Array 
        (
        ) 

       [visible:protected] => Array 
        (
        ) 

       [appends:protected] => Array 
        (
        ) 

       [guarded:protected] => Array 
        (
         [0] => * 
        ) 

       [dates:protected] => Array 
        (
        ) 

       [touches:protected] => Array 
        (
        ) 

       [observables:protected] => Array 
        (
        ) 

       [with:protected] => Array 
        (
        ) 

       [morphClass:protected] => 
       [exists] => 1 
      ) 

     [2] => Room Object 
      (
       [table:protected] => rooms 
       [fillable:protected] => Array 
        (
         [0] => properties_id 
         [1] => price 
         [2] => is_available 
         [3] => type 
         [4] => description 
        ) 

       [connection:protected] => 
       [primaryKey:protected] => id 
       [perPage:protected] => 15 
       [incrementing] => 1 
       [timestamps] => 1 
       [attributes:protected] => Array 
        (
         [id] => 3 
         [properties_id] => 4 
         [price] => 250000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 0000-00-00 00:00:00 
         [type] => 1 
         [description] => 
        ) 

       [original:protected] => Array 
        (
         [id] => 3 
         [properties_id] => 4 
         [price] => 250000 
         [is_available] => 1 
         [created_at] => 0000-00-00 00:00:00 
         [updated_at] => 0000-00-00 00:00:00 
         [type] => 1 
         [description] => 
        ) 

       [relations:protected] => Array 
        (
        ) 

       [hidden:protected] => Array 
        (
        ) 

       [visible:protected] => Array 
        (
        ) 

       [appends:protected] => Array 
        (
        ) 

       [guarded:protected] => Array 
        (
         [0] => * 
        ) 

       [dates:protected] => Array 
        (
        ) 

       [touches:protected] => Array 
        (
        ) 

       [observables:protected] => Array 
        (
        ) 

       [with:protected] => Array 
        (
        ) 

       [morphClass:protected] => 
       [exists] => 1 
      ) 

    ) 

)

преобразуется в JSON поле номера должно быть массивом не объект:

{"other_parameters": "something","rooms":{"1":{"id":2,"properties_id":4,"price":350000,"is_available":1,"created_at":"-0001-11-30 00:00:00","updated_at":"2014-10-21 18:13:15","type":1,"description":null},"2":{"id":3,"properties_id":4,"price":250000,"is_available":1,"created_at":"-0001-11-30 00:00:00","updated_at":"-0001-11-30 00:00:00","type":1,"description":""}}} 
+0

пожалуйста, вы можете оставить исходный объект PHP за $ собственность-> номер – Gustonez

ответ

6

Я нашел решение в документации Laravel.

после изменения массива, вы должны вызвать метод из названных значений сбора Laravel(), которые устраивают индексы массива, например:

unset($property->rooms[$key]); 
$property->rooms->values(); 
+0

Где вы нашли это в документации? @Miguel –

+0

https://laravel.com/docs/5.5/collections#method-values – Andy

0

Вариант 1

$array = array(); 
foreach ($property->rooms as $key => $room) { 
    if ($room->type == 1) { 
     unset($property->rooms->{$key}); <<-- pay attention to this 
    } else { 
     $array[] = get_object_vars($room); // sort the passed row into new array 
    } 
} 
print_r($array); 

Вариант 2

Для преобразования из JSON в массив установить флаг ассоциативный в ИСТИНА:

json_decode('Your json script', true); 

foreach ($property['rooms'] as $key => $room) { 
    if ($room['type'] == 1) { 
     unset($property['rooms'][$key]); 
    } 
} 
$array = array_values($property['rooms']); 
print_r($array);