Laravel: результат массива — «истина», а не объектPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel: результат массива — «истина», а не объект

Сообщение Anonymous »

Я составляю план диеты с помощью Laravel 8.
База данных выглядит следующим образом:



Рецепты
Категория
Калории




Яйца
завтрак
180


Йогурт< /td>
завтрак
50


Яблоко пирог
закуски
289


Банановый пирог
закуски
386


Томатная паста
обед
712


Салат с курицей
обед
956


Овощной суп
ужин
410

< tr>
Рыба с картофелем
ужин
652



Я хотел бы получать дневное питание в соответствии со среднесуточной калорийностью.
Например, если моя ежедневная калорийность составляет 1500 ккал, я хочу получить на день 4 рецепта (завтрак/обед/ужин/перекусы), общая калорийность которых составляет 1300–1500 калорий.
Для этого я создал несколько функций:

Код: Выделить всё

use App\Models\Recipe;

// Function to generate combinations of recipes
function generateCombinations($items, $n, $start = 0, $result = [], &$results = []) {
if ($n === 0) {
$results[] = $result;
return;
}

for ($i = $start; $i < count($items); $i++) {
$result[] = $items[$i];
generateCombinations($items, $n - 1, $i + 1, $result, $results);
array_pop($result);
}
}

// Function to filter combinations by total calories
function filterCombinationsByCalories($combinations, $dailyCalories) {
return array_filter($combinations, function($combination) use ($dailyCalories) {
$totalCalories = array_sum(array_column($combination, 'calories'));
return $totalCalories >= $dailyCaloriesMin && $totalCalories get()->toArray();

// Generate combinations of recipes for this meal category
$combinations = [];
generateCombinations($recipes, 1, 0, [], $combinations);

// Filter combinations by total calories
$filteredCombinations = filterCombinationsByCalories($combinations, $dailyCalories);

// If there are no valid combinations, choose a single recipe with the highest calories
if (empty($filteredCombinations)) {
$selectedRecipe = Recipe::where('category', $category)->orderBy('calories', 'desc')->first();
$mealPlan[$category] = $selectedRecipe;
} else {
// Randomly select a combination from the filtered combinations
$selectedCombination = $filteredCombinations[array_rand($filteredCombinations)];
$mealPlan[$category] = $selectedCombination;
}
}

return $mealPlan;
}

// Example usage
$dailyCalories = 1500;
$dailyCaloriesMin = 1300;
$mealPlan = getDailyMealPlan($dailyCalories);
print_r($mealPlan);
Но вместо объекта я получил «истину».
Это сработает, если я удалю минимальное количество калорий, но общее количество калорий часто будет меньше более 1300:

Код: Выделить всё

// Function to filter combinations by total calories
function filterCombinationsByCalories($combinations, $dailyCalories) {
return array_filter($combinations, function($combination) use ($dailyCalories) {
$totalCalories = array_sum(array_column($combination, 'calories'));
return $totalCalories 

Подробнее здесь: [url]https://stackoverflow.com/questions/78390627/laravel-array-result-is-true-instead-object[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»