Я делаю веб-сайт, который использует цикл foreach для вывода. На выходе получается куча массивов, но это не совсем правильно. Я использовал foreach дважды, потому что для вывода требуется 2 массива. У меня есть нужные мне массивы, но я не могу их объединить. Мне нужно, чтобы они были объединены, потому что я хочу отсортировать массив на основе значения.
Это код, который я использую:
$counter_saw_wp = 0;
foreach($v as $key => $value){
foreach($v_wp as $k => $val){
$v_saw_wp[$k]["phone_id"] = $val["phone_id"];
$v_saw_wp[$k]["phone_name"] = $val["phone_name"];
$v_saw_wp[$k]["phone_ram"] = $val["phone_ram"];
$v_saw_wp[$k]["phone_memory"] = $val["phone_memory"];
$v_saw_wp[$k]["phone_img"] = $val["phone_img"];
$v_saw_wp[$k]["v_saw"] = $value ["v"];
$v_saw_wp[$k]["v_wp"] = $val["v_wp"];
$v_saw_wp[$k]["v_saw_wp"] = (($value["v"] + $val["v_wp"])/2);
}
$v_total_saw_wp = array();
$v_total_saw_wp[] = array_merge($v_total_saw_wp, $v_saw_wp[$counter_saw_wp]);
$counter_saw_wp++;
var_dump($v_total_saw_wp);
}
И это результат, когда я var_dump переменную:
array(1) {
[0]=>
array(8) {
["phone_id"]=>
string(2) "26"
["phone_name"]=>
string(19) "Samsung Galaxy S23+"
["phone_ram"]=>
string(1) "8"
["phone_memory"]=>
string(3) "256"
["phone_img"]=>
string(11) "s23plus.png"
["v_saw"]=>
float(45)
["v_wp"]=>
float(2.7588120104614227)
["v_saw_wp"]=>
float(23.879406005230713)
}
}
array(1) {
[0]=>
array(8) {
["phone_id"]=>
string(2) "27"
["phone_name"]=>
string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=>
string(2) "12"
["phone_memory"]=>
string(3) "256"
["phone_img"]=>
string(12) "s23ultra.png"
["v_saw"]=>
float(41.25)
["v_wp"]=>
float(2.5434238896587567)
["v_saw_wp"]=>
float(21.896711944829377)
}
}
array(1) {
[0]=>
array(8) {
["phone_id"]=>
string(2) "28"
["phone_name"]=>
string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=>
string(2) "12"
["phone_memory"]=>
string(3) "512"
["phone_img"]=>
string(12) "s23ultra.png"
["v_saw"]=>
int(40)
["v_wp"]=>
float(2.475319476936885)
["v_saw_wp"]=>
float(21.23765973846844)
}
}
Но если я использую
$v_total_saw_wp = $v_saw_wp[$counter_saw_wp];
вместо
$v_total_saw_wp = array();
$v_total_saw_wp[] = array_merge($v_total_saw_wp, $v_saw_wp[$counter_saw_wp]);
Это результат, который я получаю:
array(8) {
["phone_id"]=>
string(2) "26"
["phone_name"]=>
string(19) "Samsung Galaxy S23+"
["phone_ram"]=>
string(1) "8"
["phone_memory"]=>
string(3) "256"
["phone_img"]=>
string(11) "s23plus.png"
["v_saw"]=>
float(45)
["v_wp"]=>
float(2.7588120104614227)
["v_saw_wp"]=>
float(23.879406005230713)
}
array(8) {
["phone_id"]=>
string(2) "27"
["phone_name"]=>
string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=>
string(2) "12"
["phone_memory"]=>
string(3) "256"
["phone_img"]=>
string(12) "s23ultra.png"
["v_saw"]=>
float(41.25)
["v_wp"]=>
float(2.5434238896587567)
["v_saw_wp"]=>
float(21.896711944829377)
}
array(8) {
["phone_id"]=>
string(2) "28"
["phone_name"]=>
string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=>
string(2) "12"
["phone_memory"]=>
string(3) "512"
["phone_img"]=>
string(12) "s23ultra.png"
["v_saw"]=>
int(40)
["v_wp"]=>
float(2.475319476936885)
["v_saw_wp"]=>
float(21.23765973846844)
}
Но это должно выглядеть так: (чтобы я мог его отсортировать)
array(3) {
[0]=>
array(8) {
["phone_id"]=>
string(2) "26"
["phone_name"]=>
string(19) "Samsung Galaxy S23+"
["phone_ram"]=>
string(1) "8"
["phone_memory"]=>
string(3) "256"
["phone_img"]=>
string(11) "s23plus.png"
["v_saw"]=>
float(45)
["v_wp"]=>
float(2.7588120104614227)
["v_saw_wp"]=>
float(23.879406005230713)
}
[1]=>
array(8) {
["phone_id"]=>
string(2) "27"
["phone_name"]=>
string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=>
string(2) "12"
["phone_memory"]=>
string(3) "256"
["phone_img"]=>
string(12) "s23ultra.png"
["v_saw"]=>
float(41.25)
["v_wp"]=>
float(2.5434238896587567)
["v_saw_wp"]=>
float(21.896711944829377)
}
[2]=>
array(8) {
["phone_id"]=>
string(2) "28"
["phone_name"]=>
string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=>
string(2) "12"
["phone_memory"]=>
string(3) "512"
["phone_img"]=>
string(12) "s23ultra.png"
["v_saw"]=>
int(40)
["v_wp"]=>
float(2.475319476936885)
["v_saw_wp"]=>
float(21.23765973846844)
}
}
Я пытался использовать array_merge в цикле foreach, но это не сработало. Он просто помещает каждый массив в другой массив (как показано выше). Я также пытался использовать array_merge вне цикла foreach, но он просто берет последний массив из цикла.
[РЕДАКТИРОВАТЬ] Я пробовал использовать этот код (ответ Сергея Леоненко):
$counter_saw_wp = 0;
$v_total_saw_wp = array();
foreach($v as $key => $value){
foreach($v_wp as $k => $val){
$v_saw_wp[$k]["phone_id"] = $val["phone_id"];
$v_saw_wp[$k]["phone_name"] = $val["phone_name"];
$v_saw_wp[$k]["phone_ram"] = $val["phone_ram"];
$v_saw_wp[$k]["phone_memory"] = $val["phone_memory"];
$v_saw_wp[$k]["phone_img"] = $val["phone_img"];
$v_saw_wp[$k]["v_saw"] = $value ["v"];
$v_saw_wp[$k]["v_wp"] = $val["v_wp"];
$v_saw_wp[$k]["v_saw_wp"] = (($value["v"] + $val["v_wp"])/2);
}
$v_total_saw_wp[] = array_merge($v_total_saw_wp, $v_saw_wp[$counter_saw_wp]);
$counter_saw_wp++;
var_dump($v_total_saw_wp);
}
Но когда я var_dump переменную, вывод выглядит так:
array(3)
{
[0]=> array(8)
{
["phone_id"]=> string(2) "26"
["phone_name"]=> string(19) "Samsung Galaxy S23+"
["phone_ram"]=> string(1) "8"
["phone_memory"]=> string(3) "256"
["phone_img"]=> string(11) "s23plus.png"
["v_saw"]=> float(45)
["v_wp"]=> float(2.7588120104614227)
["v_saw_wp"]=> float(23.879406005230713)
}
[1]=> array(9)
{
[0]=> array(8)
{
["phone_id"]=> string(2) "26"
["phone_name"]=> string(19) "Samsung Galaxy S23+"
["phone_ram"]=> string(1) "8"
["phone_memory"]=> string(3) "256"
["phone_img"]=> string(11) "s23plus.png"
["v_saw"]=> float(45)
["v_wp"]=> float(2.7588120104614227)
["v_saw_wp"]=> float(23.879406005230713)
}
["phone_id"]=> string(2) "27"
["phone_name"]=> string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=> string(2) "12"
["phone_memory"]=> string(3) "256"
["phone_img"]=> string(12) "s23ultra.png"
["v_saw"]=> float(41.25)
["v_wp"]=> float(2.5434238896587567)
["v_saw_wp"]=> float(21.896711944829377)
}
[2]=> array(10)
{
[0]=> array(8)
{
["phone_id"]=> string(2) "26"
["phone_name"]=> string(19) "Samsung Galaxy S23+"
["phone_ram"]=> string(1) "8"
["phone_memory"]=> string(3) "256"
["phone_img"]=> string(11) "s23plus.png"
["v_saw"]=> float(45)
["v_wp"]=> float(2.7588120104614227)
["v_saw_wp"]=> float(23.879406005230713)
}
[1]=> array(9)
{
[0]=> array(8)
{
["phone_id"]=> string(2) "26"
["phone_name"]=> string(19) "Samsung Galaxy S23+"
["phone_ram"]=> string(1) "8"
["phone_memory"]=> string(3) "256"
["phone_img"]=> string(11) "s23plus.png"
["v_saw"]=> float(45)
["v_wp"]=> float(2.7588120104614227)
["v_saw_wp"]=> float(23.879406005230713)
}
["phone_id"]=> string(2) "27"
["phone_name"]=> string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=> string(2) "12"
["phone_memory"]=> string(3) "256"
["phone_img"]=> string(12) "s23ultra.png"
["v_saw"]=> float(41.25) ["v_wp"]=> float(2.5434238896587567)
["v_saw_wp"]=> float(21.896711944829377)
}
["phone_id"]=> string(2) "28"
["phone_name"]=> string(24) "Samsung Galaxy S23 Ultra"
["phone_ram"]=> string(2) "12"
["phone_memory"]=> string(3) "512"
["phone_img"]=> string(12) "s23ultra.png"
["v_saw"]=> int(40)
["v_wp"]=> float(2.475319476936885)
["v_saw_wp"]=> float(21.23765973846844)
}
}
Я имею в виду, что это нормально, если массивов не так много, но проблема в том, что у меня есть более 200 данных в базе данных, что делает вывод таким большим, и сеть даже рухнула, когда я попытался это сделать.
Кто-нибудь знает, как это исправить?
[ДРУГОЕ РЕДАКТИРОВАНИЕ] Я решил это! Это код, который я использую:
$counter_saw_wp = 0;
foreach($v as $key => $value){
foreach($v_wp as $k => $val){
$v_saw_wp[$k]["phone_id"] = $val["phone_id"];
$v_saw_wp[$k]["phone_name"] = $val["phone_name"];
$v_saw_wp[$k]["phone_ram"] = $val["phone_ram"];
$v_saw_wp[$k]["phone_memory"] = $val["phone_memory"];
$v_saw_wp[$k]["phone_img"] = $val["phone_img"];
$v_saw_wp[$k]["v_saw"] = $value ["v"];
$v_saw_wp[$k]["v_wp"] = $val["v_wp"];
$v_saw_wp[$k]["v_saw_wp"] = (($value["v"] + $val["v_wp"])/2);
}
$v_avg_saw_wp[] = array_merge(array(), $v_saw_wp[$counter_saw_wp]);
$counter_saw_wp++;
}






Ваша ошибка заключалась в том, что вы определяете и присваиваете массив массиву. Но вы должны определить свой массив вне цикла foreach:
$v_total_saw_wp = [];
foreach($v as $key => $value){
foreach($v_wp as $k => $val){
$v_total_saw_wp[$key]["phone_id"] = $val["phone_id"];
$v_total_saw_wp[$key]["phone_name"] = $val["phone_name"];
$v_total_saw_wp[$key]["phone_ram"] = $val["phone_ram"];
$v_total_saw_wp[$key]["phone_memory"] = $val["phone_memory"];
$v_total_saw_wp[$key]["phone_img"] = $val["phone_img"];
$v_total_saw_wp[$key]["v_saw"] = $value ["v"];
$v_total_saw_wp[$key]["v_wp"] = $val["v_wp"];
$v_total_saw_wp[$key]["v_saw_wp"] = (($value["v"] + $val["v_wp"])/2);
}
}
Это должно заставить это работать и дать вам желаемый результат.
@Thea Вам не нужно использовать array_merge, просто назначьте непосредственно указанному $key
Я пробовал, но вывод по-прежнему неправильный. Я отредактировал свой пост с выводом, когда попытался определить массив вне цикла foreach.