2014-12-05 71 views
3

我有一個錯誤之後從laravel口才重新排列的數組索引鋒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 2014-12-05 07:07:07

回答

6

我發現laravel文檔中的溶液中。

修改後陣,你必須調用從命名值laravel集合()的方法安排數組索引,例如:

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

你在文檔中找到了這個地方? @Miguel – 2017-12-05 08:16:35

+0

https://laravel.com/docs/5.5/collections#method-values – Andy 2018-03-01 13:47:55

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轉換爲陣列設置ASSOC標誌TRUE

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);