Читаю книгу по явескрипту, дошёл до 2-мерных массивов. Там такой небольшой примерчик выводящий таблицу. [js]function display(table){ document.write("<table border=1>"); document.write('<th>Номер</th> <th>Наименование</th>'); document.write('<th>Номер модели</th> <th>Количество</th>'); for(x = 1; x<=3; x++){ document.write('<tr><td>',x,'</td>'); for(y = 0; y <=2; y++){ document.write('<td>',table[x][y],'</td>'); } document.write('</tr>'); } document.write('</table>'); } part1 = new Array('Тормозные колодки','39D48G',78); part2 = new Array('Тормозные башмаки','7D9UK3',45); part3 = new Array('Втулки','97WOST','14');[/js] brakeParts = new Array('',part1,part2,part3); display(brakeParts); Не ясны пару моментов. 1)Если написать так: [js] brakeParts = new Array();[/js] //Это будет означать что мы создаём динамически объект brakeParts класса Array А вот это тчо тогда будет означать? Вот это [js]brakeParts = new Array('',part1,part2,part3); [/js] 2)Объясните как работает это кусок: [js]for(x = 1; x<=3; x++){ document.write('<tr><td>',x,'</td>'); for(y = 0; y <=2; y++){ document.write('<td>',table[x][y],'</td>'); // } document.write('</tr>'); } document.write('</table>'); }[/js] Заранее благодарю за скорый ответ.
это и есть двумерный массив, массив элементы которого тоже массивы [js]<script> part1 = new Array('Тормозные колодки','39D48G',78); part2 = new Array('Тормозные башмаки','7D9UK3',45); brakeParts = new Array('',part1,part2); alert(brakeParts[1][2]); alert(brakeParts[2][2]); </script>[/js] запусти [js]<script language="JavaScript" type="text/javascript"> document.write('<table border="1">'); for(x = 1; x<=3; x++){ document.write('<tr><td>'+x+'</td>'); for(y = 0; y <=2; y++){ document.write('<td>'+'table['+x+']['+y+']'+'</td>'); // } document.write('</tr>'); } document.write('</table>'); </script>[/js]
ну Вот это не более чем создание массива, первым членом которого будет пустая строка, а вторым, третьим и четвертым будут массивы, заданные ранее. а этот кусок работает так: сначала есть цикл, котрый проходит от одного до трех. в нем есть цикл, который проходит от нуля до двух на каждом круге предыдущего цикла. Т.е. первая итерация это x=1. Дальше крутится цикл с игреком: x=1, y=0, и еще разик x=1, y=1, потом опять x=1, y=2. Все просто. Соответственно, в следующий заход икс подростет, игрек опять пройдет от нуля до двух, потом опять икс подростет и игрек снова пройдет от нуля до двух.... Что это значит для многомерного массива, а именно для table[x][y]: сначала из массива table берется член [1], потом по очереди из него,из этого члена как из массива, берутся члены с нуля по два - три штуки. Потом опять икс подрос, и из table берется [2], из него, как из массива (а он и есть массив видимо) берутся члены с 0 по 2. А в чем вопрос? =) Двумерный массив - это табличка.
HTML: part1 = new Array('Тормозные колодки','39D48G',78); Это создание объекта парт1 и передача конструктору Аррей значений этого объекта? Скажите, каким образом, откуда куда летят элементы массива, от этого? Код (Text): part1 = new Array('Тормозные колодки','39D48G',78); part2 = new Array('Тормозные башмаки','7D9UK3',45); part3 = new Array('Втулки','97WOST','14'); Каким образом они вставляются в таблицу? НЕ знаю как они вставляются.
в приведенном вами коде эти данные в таблицу никак не попадут. а вот если заменить массив table на brakeParts - тогда да, попадут. Golovastik Это создание объекта парт1 и передача конструктору Аррей значений этого объекта? Выдыхай, бобер, выдыхай! =) Это создание массива парт1 с членами таким-то, сяким-то и эдаким. Как это делается, что там вобще делается и куда там что летит - отдельная пестня... Можете почитать про ассемблер надосуге. Расширите сознание. Паралельно можно почитать про процессоры, как они работают, сколько у них комманд, и т.п. Но ни к пхп ни к джаваскрипту это никаким боком вам не приклеится.
Вот это: Код (Text): brakeParts = new Array('',part1,part2,part3);// создали многомерный массив массив Чтоб создать многомерный массив, нужно внутри конструктора Array который принадлежит классу Array, прописать сами одномерные массивы созданные раннее? Если это так, brakeParts - как знать сколько строк и столбцов я имею в этом массиве при таком объявлении. Код (Text): brakeParts = new Array('',part1,part2,part3);// создали многомерный массив массив
[js]<script> function print_r(arr, level) { var print_red_text = ""; if(!level) level = 0; var level_padding = ""; for(var j=0; j<level+1; j++) level_padding += " "; if(typeof(arr) == 'object') { for(var item in arr) { var value = arr[item]; if(typeof(value) == 'object') { print_red_text += level_padding + "'" + item + "' :\n"; print_red_text += print_r(value,level+1); } else print_red_text += level_padding + "'" + item + "' => \"" + value + "\"\n"; } } else print_red_text = "===>"+arr+"<===("+typeof(arr)+")"; return print_red_text; } part1 = new Array('Тормозные колодки','39D48G',78); part2 = new Array('Тормозные башмаки','7D9UK3',45); brakeParts = new Array('',part1,part2); alert(print_r(brakeParts)); </script>[/js]
сколько столбцов вы либо знаете заранее, либо не знаете заранее Другого не дано. Но есть возможность проверить член массива на то, является ли он тоже массивом is_array(brakeParts[0]) будет false, потому, что там пустая строка, а она не массив. на трех других членах будет тру, и дальше вы можете пройти по ним в цикле через count или sizeof. В случае если у вас не циферковые массивы, вы можете использовать конструкцию foreach, получив каждый член (да что ж такое-то?! одни члены кругом!) ввиде ключа и значения. Очень удобно, очень быстро. http://www.php.net/manual/en/function.count.php http://www.php.net/manual/en/function.sizeof.php http://www.php.net/manual/en/control-st ... oreach.php Одномерные, двумерные или многомерные массивы - все равно. В пхп нет строгой типизации. Каждый член массива может быть массивом. И так до бесконечности.
Есть такой вариант. Код (Text): <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>Тренировка</title></head> <script type='text/javascript'> //------------------------------------------------------------- //----------------------2-мерный массив------------------------- //------------------------------------------------------------- function display(parametr_func){ document.write("<table border=1>"); document.write('<tr><td>Номер</td> <td>Наименование</td>'); document.write('<td>Номер модели</td> <td>Количество</td></tr>'); for(var i = 0; i < 3; i++){ document.write('<tr><td>', i+1, '</td>'); for(var j = 0; j < 3; j++){ document.write('<td>', parametr_func[i][j], '</td>'); } document.write('</tr>'); } document.write("</table>"); } part1 = ['Машина','BMW','555']; part2 = ['Самолёт','TY-134','888']; part3 = ['Телефон','Nokia N73','22']; display(new Array(part1,part2,part3)); </script> <body></body></html> Как в таком случаи будет называться созданный массив в этой строке? Код (Text): display(new Array(part1,part2,part3));
Golovastik в этом месте никак, это анонимный вызов класса (в java это так по крайней мере называется xD) а в функции display - parametr_func
никак. но внутри фунции display он будет называться parametr_func... что-то мне кажется, проблема у вас не в массивах. PHP: <? function a ($b) {} $c = ''; a($c); как будет называться переменная $c в функции a?
Код (Text): в функции display - parametr_func А за функцией дисплей как можно что-то изменить ,я имею ввиду значения например 1-ой строки, 2-го столбца? 2)По поводу предыдущего кода, зачем там передавалась в этой строке кода: Код (Text): brakeParts = new Array('',part1,part2,part3); кавычки,зачем? Если написать вместо кавычек лбое число 200,1000, всё равно результат на экран не поменяется, зачем нужны тогда кавычки,зачем нужно передавать в качесве аргумента функции массив, и первым параметром которого кавычки или любое число которого не даёт толка и не куда не передаётся,но без этого не работает?
[js]parametr_func[0][1]='blabla';[/js] обход массива начинается не с 0го элемента (там где у нас кавычки), а с первого , автор сделал это для того, что бы список начинался не с 0 а с 1 в таблице которая выводится
Golovastik я ж объяснил ... индексы массива заполняются от 0 т.е. 0 1 2 3 4 и т.п. т.е. brakeParts = new Array('',part1,part2,part3) 0 это кавычки 1 part1 2 part2 3 part3 поскольку в самом первом примере, в цикле for(x = 1; x<=3; x++) икс начинается с единицы, значит первый элемент массива(элемент с индексом 0) пропускается, в нем у нас как раз кавычки (все равно что туда писать этот элемент цикл пропускает). Эта же переменная икс используется для нумерации строк (самая левая колонка), так вот нулевой элемент пропускается, для того чтобы нумерация шла не с нуля, а с единицы т.е. а не я не знаю как понятнее объяснить
прихоть автора, не более. У меня это тоже вызвало удивление, ибо дергается потом не первый член массива [0] (массивы начинаются-то с нуля!), а второй - [1] Мало ли дураков, не думайте об этом.
Он спросил зачем это было сделано. =) Ну я могу допустим предположить такую ситуацию, когда в первом члене массива будет его название. А во втором допустим описание. А третий, четвертый и пятый уже запчасти.
igordata я ответил ж зачем http://www.php.ru/forum/viewtopic.php?p=227589#227589 если там будет с нулевого члена то список в таблице будет начинаться с нуля
я просто привык что "авторы" делают очередное "это" сплош и рядом, и уже давно не анализрую зачем они это делают =) поэтому в голову даже не пришло, что за этим, пока ты не показал картинку - я не понимал мысль.