Построить массив из 3-х массивов с переполнением стека

У меня есть некоторые проблемы для создания массива.

Массив А:

Array
(
[0] => 2015-09-13
[1] => 2015-09-14
[2] => 2015-09-15
[3] => 2015-09-16
[4] => 2015-09-17
[5] => 2015-09-18
[6] => 2015-09-19
)

Массив Б:

Array
(
[0] => 1
[1] => 8
)

Массив C:

Array
(
[0] => Leaves-19
[1] => Shifts-18
[2] => Shifts-18
[3] => Shifts-18
[4] => Shifts-18
[5] => Shifts-18
[6] => Leaves-19
[7] => Leaves-19
[8] => Shifts-12
[9] => Shifts-12
[10] => Shifts-12
[11] => Shifts-12
[12] => Shifts-12
[13] => Leaves-19
)

Желаемый конечный результат:

Array
(
[0] => 2015-09-13|1|Leaves-19
[1] => 2015-09-14|1|Shifts-18
[2] => 2015-09-15|1|Shifts-18
[3] => 2015-09-16|1|Shifts-18
[4] => 2015-09-17|1|Shifts-18
[5] => 2015-09-18|1|Shifts-18
[6] => 2015-09-19|1|Leaves-19
[7] => 2015-09-13|8|Leaves-19
[8] => 2015-09-14|8|Shifts-12
[9] => 2015-09-15|8|Shifts-12
[10] => 2015-09-16|8|Shifts-12
[11] => 2015-09-17|8|Shifts-12
[12] => 2015-09-18|8|Shifts-12
[13] => 2015-09-19|8|Leaves-19
)

Я потерялся в for а также foreach,

Вот логика:

  • 1st parameter дата и форма пришествия array B, Это повторение
    после 6 записей.
  • 2nd parameter это идентификатор пользователя. Он меняется через 6 записей и переходит к следующему идентификатору.
  • 3rd parameter это запись array B,

Другая информация:

  • Массивы не имеют одинаковую длину.
  • Array A, насчитывает 6 записей.
  • Array B, считает случайные записи.
  • Array C, является Array A х 2.

Я уже пытался сделать for для меня array B и после foreach в array A, но это не было функционально.

Я не знаю с чего мне начать.

Надеюсь, у меня будет помощь или подсказка.

Большое спасибо.

3

Решение

ты можешь использовать оператор модуля

$OutputArray = Array();

for($i=0; $i < max(count($a1),count($a2),count($a3)); $i++){
array_push($OutputArray, $a1[ $i % count($a1) ] . "|" .
$a2[ $i % count($a2) ] . "|" . $a3[ $i % count($a3) ]);
}

print_r($OutputArray);

ты получаешь:

массив
(
[0] => 2015-09-13 | 1 | Листья-19
[1] => 2015-09-14 | 8 | Смены-18
[2] => 2015-09-15 | 1 | Смены-18
[3] => 2015-09-16 | 8 | Смены-18
[4] => 2015-09-17 | 1 | Смены-18
[5] => 2015-09-18 | 8 | Смены-18
[6] => 2015-09-19 | 1 | Листья-19
[7] => 2015-09-13 | 8 | Листья-19
[8] => 2015-09-14 | 1 | Смены-12
[9] => 2015-09-15 | 8 | Смены-12
[10] => 2015-09-16 | 1 | Смены-12
[11] => 2015-09-17 | 8 | Смены-12
[12] => 2015-09-18 | 1 | Смены-12
[13] => 2015-09-19 | 8 | Листья-19
)

если хотите по порядку (ожидается):

$OutputArray = Array();

$max = max(count($a1),count($a2),count($a3));
for($i=0; $i < $max; $i++){
array_push($OutputArray, $a1[$i%count($a1)] . "|" .
$a2[ $i*count($a2) / $max ] . "|" . $a3[$i%count($a3)]);
}

print_r($OutputArray);

ты получаешь:

массив
(
[0] => 2015-09-13 | 1 | Листья-19
[1] => 2015-09-14 | 1 | Смены-18
[2] => 2015-09-15 | 1 | Смены-18
[3] => 2015-09-16 | 1 | Смены-18
[4] => 2015-09-17 | 1 | Смены-18
[5] => 2015-09-18 | 1 | Смены-18
[6] => 2015-09-19 | 1 | Листья-19
[7] => 2015-09-13 | 8 | Листья-19
[8] => 2015-09-14 | 8 | Смены-12
[9] => 2015-09-15 | 8 | Смены-12
[10] => 2015-09-16 | 8 | Смены-12
[11] => 2015-09-17 | 8 | Смены-12
[12] => 2015-09-18 | 8 | Смены-12
[13] => 2015-09-19 | 8 | Листья-19
)
6

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

Попробуйте это, он перебирает самый большой массив и обуславливает подсчет второстепенных в соответствии с желаемым поведением листинга.

<?php

$arrA = ['2015-09-13','2015-09-14','2015-09-15','2015-09-16',
'2015-09-17','2015-09-18','2015-09-19'];
$arrB = [1,8];
$arrC = ['Leaves-19','Shifts-18','Shifts-18','Shifts-18','Shifts-18','Shifts-18',
'Leaves-19','Leaves-19','Shifts-12','Shifts-12','Shifts-12','Shifts-12','Shifts-12',
'Leaves-19'];
$a = $b = 0;

for ($c = 0; $c < count($arrC); $c++) {
$arrC[$c] = $arrA[$a].'|'.$arrB[$b].'|'.$arrC[$c];
$a++;
if ($a == count($arrA)) {
$a = 0;
$b++;
}
};

echo "<pre>";
print_r($arrC);

ВЫХОД:

Array
(
[0] => 2015-09-13|1|Leaves-19
[1] => 2015-09-14|1|Shifts-18
[2] => 2015-09-15|1|Shifts-18
[3] => 2015-09-16|1|Shifts-18
[4] => 2015-09-17|1|Shifts-18
[5] => 2015-09-18|1|Shifts-18
[6] => 2015-09-19|1|Leaves-19
[7] => 2015-09-13|8|Leaves-19
[8] => 2015-09-14|8|Shifts-12
[9] => 2015-09-15|8|Shifts-12
[10] => 2015-09-16|8|Shifts-12
[11] => 2015-09-17|8|Shifts-12
[12] => 2015-09-18|8|Shifts-12
[13] => 2015-09-19|8|Leaves-19
)
2

Моя версия:

$arrayA = array('2015-09-13','2015-09-14','2015-09-15','2015-09-16','2015-09-17','2015-09-18','2015-09-19');
$arrayB = array(1,8);
$arrayC = array('Leaves-19','Leaves-18','Leaves-17','Leaves-16','Leaves-15','Leaves-14','Leaves-13','Leaves-12','Leaves-11','Leaves-10','Leaves-9','Leaves-8','Leaves-7','leaves-6');
$output = array();
$count = 0;

foreach($arrayB as $arrayBElement){
foreach($arrayA as $arrayAElement){
$output[] = $arrayC[$count] . '|' . $arrayAElement . '|' . $arrayBElement;
$count++;
}
}

var_dump($output);

E: удален ошибочный счет

0

Это воняет домашнее задание поэтому я собираюсь ответить в псевдокоде, так что, надеюсь, вы сможете применить некоторые подсказки и прийти к решению самостоятельно.

Похоже, что, возможно, Array B ([1,8]) — это список индексов, с которого начинается печать следующего индекса. Ваше собственное заявление (2nd parameter is the user id. It changes after 6 entries and pass to the next id.) не является точным в зависимости от желаемого конечного результата:

[6] => 2015-09-19|1|Leaves-19
[7] => 2015-09-13|8|Leaves-19

Это переходит к следующему id по индексу 7 (счет 8) не по индексу 6 (счет 7 или один после 6 записей).

Таким образом, мое псевдо-решение было бы так:

  • Создайте новый массив, повторяя Array A, пока он не будет соответствовать длине Array C
  • Добавьте массив B к массиву A, найдя элемент массива B, который равен или меньше (1+index):

    0 => '1', 1 => '1' ... 7 => '8'

  • Объединить массив C с каждым массивом с индексом четности (например, newArray[ 0 ] . ArrayC[ 0 ])

Это дает вам конечный результат, который вы хотите.

0

попробуйте этот код, я назвал ваши 3 массива как $arrA, $arrB а также $arrC

$arrA = Array(
'2015-09-13',
'2015-09-14',
'2015-09-15',
'2015-09-16',
'2015-09-17',
'2015-09-18',
'2015-09-19'
);
$arrB = array(1,8);
$arrC  = array(
'Leaves-19',
'Shifts-18',
'Shifts-18',
'Shifts-18',
'Shifts-18',
'Shifts-18',
'Leaves-19',
'Leaves-19',
'Shifts-12',
'Shifts-12',
'Shifts-12',
'Shifts-12',
'Shifts-12',
'Leaves-19'
);

$output = array();
$indx = 0;
foreach($arrB as $b){
foreach($arrA as $a){
$output[] = $a.'|'.$b.'|'.$arrC[$indx];
$indx++;/*new line addded*/
}
//$indx++;/*remove this line from here*/
}

echo "<pre>";
print_r($output);
echo "</pre>";
0

С разными размерами попробуйте угадать maxlength

//Create arrays
var Adates= ["2015-09-13", "2015-09-14", "2015-09-15"];
var Bnums= ["1", "2", "3"];
var Cnums= ["Leaves-19", "Shifts-18", "Shifts-18"];

//get size
var maxLenght=0;
if(Adates.length>maxLenght) maxLenght=Adates.length;
if(Bnums.length>maxLenght) maxLenght=Bnums.length;
if(Cnums.length>maxLenght) maxLenght=Cnums.length;

//merge and populate
var OutputArray;
for (i = 0; i < maxLenght; i++) {
OutputArray[i]=Adates[i]+"|"+Bnums[i]+"|"+Cnums[i];
}
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector