I have two array.
$ids = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110];
$users = [1,2,3,4,5];
for ($index = 0; $index < count($ids ); $index++) {
echo $ids [$index] . $users [$index];
}
My Result;
100 - 1 101 - 2 102 - 3 103 - 4 104 - 5
I would like to merge it with duplicates ids.
100 - 1 101 - 2 102 - 3 103 - 4 104 - 5 105 - 1 106 - 2 107 - 3 108 - 4 109 - 5 110 - 1
Advertisement
Answer
If your arrays are indeed this small, array_shift is a good tool. You can copy your array, pop an item off it continuously, and then re-copy the array as needed. The performance of array_shift gets worse as arrays grow large (as far as I’ve been told, but haven’t personally witnessed).
$ids = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110];
$users = [1,2,3,4,5];
// Temporary copy of users
$user_ids = [];
foreach( $ids as $id ){
// If our copy is empty, reload it
if(!$user_ids){
$user_ids = $users;
}
// Use array_shift() to grab and remove from the front
echo sprintf('%1$d - %2$d', $id, array_shift($user_ids)), PHP_EOL;
}
If you users is indeed linear like that, you can also use modular arithmetic to repeat things:
foreach( $ids as $idx => $id ){
echo sprintf('%1$d - %2$d', $id, ($idx % 5) + 1 ), PHP_EOL;
}
Both demoed here: https://3v4l.org/LuRQj