Используя PHP (7.1) со следующими данными и вложенными циклами, я пытаюсь заставить каждый хост совпадать с соответствующим числом в массиве COUNTS.
HOSTS:
Array (
0 => 'example/search?results1'
1 => 'thisone/search?results2'
2 => 'thesetoo/search?results3'
)
COUNTS:
Array (
0 => '3'
1 => '5'
2 => '7'
)
foreach ( $counts as $count ) {
foreach ( $hosts as $host ) {
$t = $count;
for ($n=0; $n<$t; $n++) {
$results[] = ++$host;
}
continue 2;
}
}
echo 'THESE ARE ALL THE RESULTS:',PHP_EOL,PHP_EOL,var_dump($results);
РЕЗУЛЬТАТЫ, Я ИЩУ:
МНОГОМЕРНАЯ Массив
Array (
0 => Array (
0 => 'example/search?results1'
1 => 'example/search?results1'
2 => 'example/search?results1'
)
1 => Array (
0 => 'thisone/search?results2'
1 => 'thisone/search?results2'
2 => 'thisone/search?results2'
3 => 'thisone/search?results2'
4 => 'thisone/search?results2'
)
2 => Array (
0 => 'thesetoo/search?results3'
1 => 'thesetoo/search?results3'
2 => 'thesetoo/search?results3'
3 => 'thesetoo/search?results3'
4 => 'thesetoo/search?results3'
5 => 'thesetoo/search?results3'
6 => 'thesetoo/search?results3'
)
)
Обратите внимание, что количество результатов в HOSTS соответствует массиву COUNTS.
В приведенных выше вложенных циклах я либо получаю только один хост для всех подсчетов, либо каждый подсчет для всех узлов в одном массиве измерений. Мне нужен многомерный массив, но вложенная логика цикла ускользает от меня. Я пытался и продолжить и разорвать петли, но не повезло. Если цикл получает другой счет, он пропускает хост. Если он получает другой хост, то он пропускает счет.
Не существует шаблона ни для хостов, ни для массива count. Они всегда будут соответствовать друг другу, но они будут случайными строками / числами. Спасибо за помощь.
если считать $hosts
а также $counts
равна:
$result = [];
foreach ($hosts as $i => $host) {
$result[] = array_fill(0, $counts[$i], $host);
}
Этот вопрос является идеальным примером использования для array_map()
а также array_fill()
.
$hosts = array(
0 => 'example/search?results1',
1 => 'thisone/search?results2',
2 => 'thesetoo/search?results3',
);
$counts = array(
0 => '3',
1 => '5',
2 => '7',
);
$result = array_map(
function($host, $count) {
return array_fill(0, $count, $host);
},
$hosts,
$counts
);
Попробуй это:
$hosts = array (
0 => 'example/search?results1',
1 => 'thisone/search?results2',
2 => 'thesetoo/search?results3'
);
$counts = array (
0 => '3',
1 => '5',
2 => '7'
);
$results =array();
foreach ( $counts as $count ) {
$key_of_count = array_search( $count, $counts );
for ($i=0; $i < (int)$count; $i++) {
$results[$key_of_count][] = $hosts[$key_of_count];
}
}
echo "<pre>"; print_r($results); echo "</pre>";
Если вы ищете способ сделать это, используя только циклы и не используя какие-либо необычные функции массива, то это может быть ответом, который вы ищете:
$result = [];
foreach($counts as $k=>$count){
$result[$k]='';
for($i=0; $i < $count; $i++){
$result[$k][] = $hosts[$k];
}
}