array_merge () Как я могу добавить «диапазон» имени массива

У меня есть переменная $ nr, которая как число массивов с тем же именем, которое я создал в предыдущей функции, примерно так:

$var = 'sorteios_'.$nr;
$$var = array($sorteio_id);

У меня это есть в функции while, поэтому было создано что-то вроде 3-х массивов с именами:

$ sorteios_1, $ sorteios_2, $ sorteios_3

И я хочу добавить их в array_merge, поэтому я должен использовать $ nr, который сообщает, сколько массивов с одинаковым именем было создано.

$nr = 3;

Я хочу, чтобы конечный результат выглядел примерно так.

$ result = array_merge ($ sorteios_1, $ sorteios_2, $ sorteios_3);

Вот и вся функция, если вы хотите проверить ее (она не завершена из-за проблемы, с которой я столкнулся):

function check_sorteios(){

global $db;

$id = $_SESSION['userid'];

$query1 =  "SELECT * FROM sorteios WHERE userid = $id";
$result1 = $db->query($query1);
$count = $result1->rowCount();

if ($count == 0){ $sorteios = 0; echo "sem sorteios";}

else{
$numero = 0;
$sorteios = 0;
$nr = 0;

while($row1 = $result1->fetch()){
if ( $numero == $count ){ return 0;}

$numero++;
$sorteio_id = $row1['id'];

$query2 =  "SELECT * FROM productos WHERE id = $sorteio_id";
$result2 = $db->query($query2);
while($row2 = $result2->fetch()){

$data = $row2['data'];
$titulo = $row2['titulo'];

if (strtotime($data) > time()){
if(!isset($$sorteio_id)){
$$sorteio_id = 1;
}

$nr++;
$var = 'sorteios_'.$nr;
$$var = array($sorteio_id);
}
}
}
}

$result = array_merge($sorteios_1, $sorteios_2, $sorteios_3);

$occurences = array_count_values($result);
print_r($occurences);

}

1

Решение

Вы можете попытаться создать строку, содержащую код, выполняющий array_merge для всех ваших массивов, а затем передать его в функцию eval (http://it1.php.net/manual/it/function.eval.php) …
Что-то вроде этого:

$str="\$result=array_merge(";
for($i=1;$i<=$nr;$i++){
$str.="\$sorteios_$i,";
}
$str=substr($str,0,-1);
$str.=");";
eval($str);

Тогда в $ result вы получите то, что вам нужно.

0

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

Есть ли причина, по которой вы не можете рекурсивно объединяться?

if ($nr > 0) {
$result = $sorteios_1;
for ($i = 2; $i <= $nr; ++$i) {
$result = array_merge($result, ${'sorteios_'.$i});
}
} else {
// you might want to handle this case differently
$result = array();
}
0