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
CodePudding user response:
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
CodePudding user response:
$ids = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110];
$users = [1,2,3,4];
for ($index = 0; $index < count($ids); $index ) {
for ($i = 0; $i < count($users); $i ) {
echo "<pre/>";
echo $ids[$i] . "-".$users[$i];
}
$k=0;
for ($j = $i; $j < $i count($users); $j ) {
echo "<pre/>";
echo $ids[$j] . "-".$users[$k];
$k ;
}
}