array_merge() How can I add a 'range' of an array name

柔情痞子 提交于 2019-12-11 09:44:17

问题


I have a $nr variable that as the number of arrays with the same name that i created in a previous function, something like this:

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

I have it in a While function so it was created something like 3 arrays with the names:

$sorteios_1 , $sorteios_2 , $sorteios_3

And i want to add them inside an array_merge, so i have to use the $nr that says how many arrays with the same name were created.

$nr = 3;

i want that the final result looks something like this.

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

That's the whole function if you want to check it (it's not complete because of the problem i'm having):

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:


You could try to create a string containing the code executing array_merge of all your arrays and then pass it to the eval function (http://it1.php.net/manual/it/function.eval.php)... Something like this:

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

Then in $result you have what you need.




回答2:


Is there a reason you can't recursively merge?

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();
}


来源:https://stackoverflow.com/questions/26067698/array-merge-how-can-i-add-a-range-of-an-array-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!