重新排列数组索引 Eloquent Laravel
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27309747/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Rearrange array index Eloquent Laravel
提问by Miguel
I have an error after delete an element from an array of laravel eloquent
从 Laravel eloquent 数组中删除一个元素后出现错误
A property has rooms
一个属性有房间
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);
}
}
When i encode this into a json, the array is convert into an object not an array
当我将其编码为 json 时,数组将转换为对象而不是数组
Before unset
未设置前
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
)
)
)
)
After unset
取消设置后
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
)
)
)
)
converted into a json the rooms field should be an array not an object:
转换为 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":""}}}
回答by Miguel
I have found a solution in the laravel documentation.
我在 laravel 文档中找到了解决方案。
after modifying the array, you have to call a method from laravel collection named values() that arrange the array indexes, example:
修改数组后,您必须从名为 values() 的 laravel 集合中调用一个方法来排列数组索引,例如:
unset($property->rooms[$key]);
$property->rooms->values();
回答by Gustonez
Option 1
选项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);
Option 2
选项 2
To convert from JSON to Array set the assoc flag to TRUE:
要将 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);