MySQL / объединить несколько массивов из вывода MySQL в операторе while

Мне нужно объединить много массивов из базы данных MySQL. Количество массивов может варьироваться. Я сериализирую данные в БД и не сериализую их на выходе. Где я в тупике, пытается использовать array_merge но не уверен, как правильно ввести данные в него.

Например, у меня есть

$sql_get_votes_data = "SELECT * FROM algo_users WHERE data LIKE '%$movie_id%'";
$result_get_votes_data = mysql_query($sql_get_votes_data);
$final_array = array();
while($row_get_votes_data = mysql_fetch_array($result_get_votes_data)) {
$final_array[] = unserialize($row_get_votes_data['data']);
}

В конечном итоге мне нужно иметь возможность сделать уникальное слияние, подобное этому.

array_unique(array_merge($final_array1,$final_array2), SORT_REGULAR);

Но так как я должен поместить каждый массив в отдельную переменную, чтобы передать в array_merge Я не уверен, как это сделать из вызова MySQL.

Любая помощь будет потрясающей.

1

Решение

Почему бы не объединить каждый новый массив, пока вы еще в цикле?

$mergedArray=array();
while($row_get_votes_data = mysql_fetch_array($result_get_votes_data)) {
$final_array = unserialize($row_get_votes_data['data']);
$mergedArray=array_merge($mergedArray,$final_array);
}
array_unique($mergedArray, SORT_REGULAR);

Или, если вам нужно отслеживать ваши отдельные массивы:

$mergedArray=array();
$i=0;
while($row_get_votes_data = mysql_fetch_array($result_get_votes_data)) {
$final_array[$i] = unserialize($row_get_votes_data['data']);
$mergedArray=array_merge($mergedArray,$final_array[$i]);
$i++
}
array_unique($mergedArray, SORT_REGULAR);

РЕДАКТИРОВАТЬ: я сначала понял, что вы просто хотели, чтобы все массивы были объединены в один массив. Вышеупомянутый отредактированный ответ теперь также удаляет дубликаты записей, как я теперь понимаю, что вы хотите.

2

Другие решения

Вы можете, например, использование call_user_func_array для этого.

<?php
$myarrs = array();

$result = call_user_func_array( 'array_merge', $myarrs); var_dump($result);

$myarrs[] = array(1,2,3);
$result = call_user_func_array( 'array_merge', $myarrs); var_dump($result);

$myarrs[] = array(4,5,6);
$result = call_user_func_array( 'array_merge', $myarrs); var_dump($result);

$myarrs[] = array(7,8,9);
$result = call_user_func_array( 'array_merge', $myarrs); var_dump($result);

но, возможно, более целесообразно реструктурировать базу данных и не помещать сериализованные массивы, а отдельные поля в таблицы; база данных может выполнять сортировку / фильтрацию / объединение.

0