начинающий вопрос: У меня такой запрос:
$arr1 = BillProduct::where('bill_id', '=', $bill->id)->get('quantity');
$arr2 = BillProduct::where('bill_id', '=', $bill->id)->get('product_id');
и его возвращение следующим образом:
[[{"quantity":15}], [[{"product_id":2}]
как я могу получить просто цифру 15, 2 ??
и как попасть в foreach рядом друг с другом? нравиться
15,2
18,3
...
вернуть в 2 переменную, например:
return $arr1, $Arr2;
Ты можешь сделать
if ($arr1->isNotEmpty()) {
$quantity = $arr1->first()->quantity;
echo $quantity; // Output: 15
}
При многократном использовании петли foreach
. Бывший
$quantities = [];
foreach ($arr1 as $item) {
$quantities[] = $item->quantity;
}
print_r($quantities);
Изменить 01
$arr1 = BillProduct::where('bill_id', '=', $bill->id)->pluck('quantity');
$arr2 = BillProduct::where('bill_id', '=', $bill->id)->pluck('product_id');
$result = [];
foreach ($arr1 as $index => $quantity) {
$product_id = $arr2[$index];
$result[] = [$quantity, $product_id];
}
print_r($result);
покажи мне код.
@MehdiBakhtiari проверьте правку 01
@MehdiBakhtiari Туалет. принять, если полезно
только одно. можно ли получить результат в 2 значения? теперь это print_r($result) и оба числа там. может получить результат вида print_r $a, $b; ????
Начиная с PHP 5 можно объединить столбцы двух ассоциативных массивов с помощью функции array_replace_recursive()
.
toArray()
$arr1 = BillProduct::select('quantity')->where('bill_id', '=', $bill->id)->get()->toArray();
$arr2 = BillProduct::select('product_id')->where('bill_id', '=', $bill->id)->get()->toArray();
$result = array_replace_recursive($arr1, $arr2);
/*
Result:
[
["quantity" => 15, "product_id" => 2],
["quantity" => 18, "product_id" => 3],
...
]
*/
foreach ($result as $record) {
$quantity = $record['quantity'];
$product_id = $record['product_id'];
// ...
}
Дополнительная информация: https://www.php.net/manual/en/function.array-replace-recursive.php
спасибо, но мне нужно вернуть только число в 2 переменных, например: print_r $a, $b;
Итак, если я правильно понимаю, результатом как $arr1, так и $arr2 всегда будет только 1 запись? В этом случае используйте функцию «first()» вместо «get()». Пример: $a1 = BillProduct::select('quantity')->where('bill_id', '=', $bill->id)->first()->quantity;
нет, проблема в обоих
Вы можете создавать переменные из элементов массива. Я не вижу никаких препятствий для того, чтобы это не было подходящим решением. Однако я обновил свой ответ и показал, как можно извлечь два столбца массива в две отдельные переменные.
хорошо и спасибо, но как я могу вернуть это? когда я помещаю 2 в одну строку, я получаю ошибку сервера, подобную этой => <br> Utility::total_quantity('minus',$quantity,$product_id);
В PHP строки должны объединяться с помощью .
. Вот так: echo "<br>" . Utility::total_quantity('minus',$quantity,$product_id);
Предполагая, что ваш product_id не появляется в результате несколько раз, вы можете использовать второй аргумент для pluck()
, чтобы назначить другой столбец в качестве ключа:
$result = BillProduct::where('bill_id', $bill->id)->pluck('quantity', 'product_id');
foreach($result as $productId => $quantity) {
// enjoy life
}
Теперь вы сохраняете один запрос :)
этот результат выглядит так: {"1":1,"2":1,"3":1,"4":1} и я хотел как [[1,1],[1,2],[1 ,3],[1,4]]
->map()
, вероятно, это исправит; формат, который вы описываете, тривиален, но в приведенных выше решениях используются два запроса, что расточительно, когда вы можете обойтись одним :). Кроме того, меньше кода.
большое спасибо. Что делать, если у меня есть два значения, такие как arr1 и arr2 в foreach?