Есть вот такой массив, пока он заполняется рандомом: Код (PHP): for($i=0; $i<100; $i++){ $arr[$i][0]=rand(0,127); //нота $arr[$i][1]=rand(0,127); //громкость $arr[$i][2]=rand(1,4); //продолжительность } Есть вот такой код: Код (PHP): $txt = "MFile 0 1 48 MTrk 0 Meta Text \"Genetic algorithm\" 0 PrCh ch=1 p=0\n"; $tmptxt=""; for($i=0;$i<100;$i++){ $on=$i*10; $tmptxt=$tmptxt.$on." On ch=1 n=".$arr[$i][0]." v=".$arr[$i][1]."\n"; } $txt=$txt.$tmptxt."1050 Meta TrkEnd TrkEnd"; который на выходе создает вот такое: Код (PHP): MFile 0 1 48 MTrk 0 Meta Text "Genetic algorithm" 0 PrCh ch=1 p=0 0 On ch=1 n=4 v=103 10 On ch=1 n=64 v=79 20 On ch=1 n=48 v=77 30 On ch=1 n=112 v=64 40 On ch=1 n=108 v=55 50 On ch=1 n=82 v=21 ... 990 On ch=1 n=55 v=46 1050 Meta TrkEnd TrkEnd Дальше надо подключить эту штуковину: $arr[$i][2]=rand(1,4) Если сделать как-то так: Код (PHP): $tmptxt=$tmptxt.$on." On ch=1 n=".$arr[$i][0]." v=".$arr[$i][1]."\n"; $off=$on+$arr[$i][2]*10; $tmptxt=$tmptxt.$off." Off ch=1 n=".$arr[$i][0]." v=0\n"; получается вот так: Код (PHP): 0 On ch=1 n=80 v=113 20 Off ch=1 n=80 v=0 10 On ch=1 n=1 v=75 30 Off ch=1 n=1 v=0 20 On ch=1 n=7 v=58 30 Off ch=1 n=7 v=0 30 On ch=1 n=90 v=75 50 Off ch=1 n=90 v=0 40 On ch=1 n=117 v=108 60 Off ch=1 n=117 v=0 Ну, понятно, что оно всё не по порядку и чудо-юдо класс "PHP MIDI CLASS" не понимает, что от него хотят. Сделал костыль: Код (PHP): $txt = "MFile 0 1 48 MTrk 0 Meta Text \"Genetic algorithm\" 0 PrCh ch=1 p=0\n"; $tmptxt=""; for($i=0;$i<100;$i++){ $on=$i*10; $off=$on+$arr[$i][2]*10; if(isset($offarr[$off])){ $offarr[$off][count($offarr[$off])]=$arr[$i][0]; }else{ $offarr[$off][0]=$arr[$i][0]; } if(isset($offarr[$on])){ $jcount=count($offarr[$on]); for($j=0;$j<$jcount;$j++){ $tmptxt=$tmptxt.$on." Off ch=1 n=".$offarr[$on][$j]." v=0\n"; } } $tmptxt=$tmptxt.$on." On ch=1 n=".$arr[$i][0]." v=".$arr[$i][1]."\n"; } $txt=$txt.$tmptxt."1050 Meta TrkEnd TrkEnd"; На выходе норм: Код (PHP): MFile 0 1 48 MTrk 0 Meta Text "Genetic algorithm" 0 PrCh ch=1 p=0 0 On ch=1 n=104 v=110 (off=30) 10 On ch=1 n=96 v=74 (off=20) 20 Off ch=1 n=96 v=0 20 On ch=1 n=39 v=115 (off=40) 30 Off ch=1 n=104 v=0 30 On ch=1 n=40 v=27 (off=70) 40 Off ch=1 n=39 v=0 40 On ch=1 n=34 v=65 (off=60) 50 On ch=1 n=32 v=17 (off=90) 60 Off ch=1 n=34 v=0 60 On ch=1 n=112 v=18 (off=70) 70 Off ch=1 n=40 v=0 70 Off ch=1 n=112 v=0 70 On ch=1 n=71 v=8 (off=80) 80 Off ch=1 n=71 v=0 80 On ch=1 n=0 v=76 (off=100) 90 Off ch=1 n=32 v=0 ... 1050 Meta TrkEnd TrkEnd Array И все работает, но выглядит чудовищно - в цикле вызывается еще один цикл, в котором вызывается функция count. Как бы его так оптимизировать?
если я правильно понял задачу Код (PHP): $txt = "MFile 0 1 48\nMTrk 0 Meta Text \"Genetic algorithm\" 0 PrCh ch=1 p=0\n"; $tmptxt=""; $offs=[]; for($i=0; $i<100; ++$i) { $on=$i*10; $tmptxt .= $on." On ch=1 n=".$arr[$i][0]." v=".$arr[$i][1].' ('.$arr[$i][2].")\n"; $off = $on + $arr[$i][2]*10; $offs[$off][] = $arr[$i][0]; if (isset($offs[$on])) { foreach($offs[$on] as $k=>$note_off) { $tmptxt .= $on.' Off ch=1 n='.$note_off.' v=0'."\n"; }//foreach unset($offs[$on]); } } $txt .= $tmptxt."1050 Meta TrkEnd\nTrkEnd";