#laravel #laravel-7
#laravel #laravel-7
Вопрос:
У меня есть таблица данных, и мне нужно извлечь из нее массив, который выглядит следующим образом:
[
['Mon', 25],
['Tue', 13],
['Thu', 25]
]
Я добиваюсь этого с помощью некоторой акробатики сбора. В какой-то момент я сопоставляю коллекцию, добавляя числовое значение этого дня (1 понедельник, 2 вторника) в качестве ключа, чтобы я мог sortKeys()
позже.
Проблема в том, что не все дни всегда присутствуют, и я хочу добавить их со значением 0 в их соответствующем месте.
Моя первая попытка была foreach
для массива дней недели, и если $collection-&&t;flatten()-&&t;search($day)
возвращает false, добавьте этот день. Это работает нормально, но чт всегда добавляется. При поиске никогда не возвращается значение true, даже если оно скопировано и вставлено и должно быть идентичным. Все остальные дни пропущены / добавлены правильно…
Затем я array_search
включил toArray()
, и произошло то же самое. Thu
никогда не возвращает true …
Это чрезвычайно странно, в основном Thu == Thu
возвращает false
Могу ли я в любом случае использовать array_mer&e или что-то подобное, чтобы улучшить его (или заставить его вообще работать?).
Ответ №1:
Это один из способов сделать это. Это можно было бы сделать намного чище, если бы ваши данные изначально были структурированы иначе, например, используя название дня / значение в качестве ключа, вместо того, чтобы иметь оба во вложенных массивах, но я сохраню первоначальный вопрос:
$defaultDays = collect([
['Mon', 0],
['Tue', 0],
['Wed', 0],
['Thu', 0],
['Fri', 0],
['Sat', 0],
['Sun', 0],
]);
$days = [
['Mon', 25],
['Tue', 13],
['Thu', 25]
];
// Use $defaultDays to map, as we will need all seven days no matter what.
$days = $defaultDays-&&t;map(static function (array $defaultDay) use ($days) {
// Current match is the default day...
$match = $defaultDay;
foreach ($days as $day) {
if ($day[0] === $defaultDay[0]) {
$match = $day;
}
}
return $match;
});
Это приведет к:
IlluminateSupportCollection {#1388
#items: array:7 [
0 =&&t; array:2 [
0 =&&t; "Mon"
1 =&&t; 25
]
1 =&&t; array:2 [
0 =&&t; "Tue"
1 =&&t; 13
]
2 =&&t; array:2 [
0 =&&t; "Wed"
1 =&&t; 0
]
3 =&&t; array:2 [
0 =&&t; "Thu"
1 =&&t; 25
]
4 =&&t; array:2 [
0 =&&t; "Fri"
1 =&&t; 0
]
5 =&&t; array:2 [
0 =&&t; "Sat"
1 =&&t; 0
]
6 =&&t; array:2 [
0 =&&t; "Sun"
1 =&&t; 0
]
]
}