1 Востаннє редагувалося Faraon (08.02.2015 18:52:41)

Тема: Двовимірний масив

Привіт всім. Є в базі табличка mapa, потрібно з цієї таблиці вибрати всі поля і занести в масив так щоб масив мав наступну конструкцію (наприкла в базі є три поля).

var mas = [['name',x,y,width,height], ['name',x,y,width,height], ['name',x,y,width,height]];

це стовпці які є в таблиці:
name,x,y,width,height.
Я думав що можна зробити так:

 var masElMap = [[0,0,0,0,0] <?php    $query_loc = mysql_query("select * from mapa") or die ("stop: ".mysql_error());
        while($row = mysql_fetch_array($query_loc))
        {
            $nameSelo = $row['name'];
            $width_icon = $row['width'];
            $height_icon = $row['height'];
            $x_coord = $row['x'];
            $y_coord = $row['y'];
            echo ",['$nameSelo', $x_coord, $y_coord, $width_icon, $height_icon]";
        }    ?>];

але нічого не працює. Через помилку яку я допускаю в цьому куску коді все перестає працювати. Що я не так роблю підкажіть будь ласка?

2 Востаннє редагувалося mike (09.02.2015 17:45:26)

Re: Двовимірний масив

Варто б було замість масиву створити обєкт в якого поля мають конкренті назви, а у вас, просто якісь непонятні індекси, які легко можна переплутати

var mapa ={
name:'',
x:'',
y:'',
width:'',
height:''
};

а коді, очевидно пропущена кома після [0,0,0,0,0]

UPD
бачу кома додається в середині циклу, але є одне але, при заповненні джаваскриптового масиву ви не обертаєта текст в лапки, і виходить щось типу цього

[some name, 0,0,0,]

а краще коли

["some name", 0,0,0,]

UPD 2
Знов не додивився, з текстом все ок, він правильно ехається

Подякували: 0xDADA11C7, Faraon2

3 Востаннє редагувалося VTrim (09.02.2015 18:14:22)

Re: Двовимірний масив

Можна зробити так

<script type="text/javascript">
  
var mas = []; //створюємо масив

mas['name'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};

mas['name2'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};

mas['name3'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};

alert(mas['name']['x']);
alert(mas['name2']['x']);
alert(mas['name3']['x']);

</script>

Якщо я правильно вас зрозумів.

Подякували: Faraon1

4

Re: Двовимірний масив

VTrim написав:

Можна зробити так

<script type="text/javascript">
  
var mas = []; //створюємо масив

mas['name'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};

mas['name2'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};

mas['name3'] = {
'x': 'значення x',
'y': 'значення y',
'width': 'значення width',
'height': 'значення height',
};

alert(mas['name']['x']);
alert(mas['name2']['x']);
alert(mas['name3']['x']);

</script>

Якщо я правильно вас зрозумів.

При роботі з JavaScript дуже зручно користуватись фнкцією console.log(), яка може приймати будь-який тип даних: рядки, масиви, об'єкти

console.log(mas)

Цей вивід можна бачити якщо натиснути F12 і перейти на закладку Console.

Більше того - прямо в консолі можна писати простенькі тести щоб побачити що виходить.

В JavaScript запис mas['name'] створює об'єкт mas.name, причому дивним чином окремо може існувати і масив, з таким же ім'ям mas = [].

Консоль показує

// В консолі Google Chrome лається на ключове слово var, тому пишу без нього
mas = [];
mas['name'] = {"key":"val"};

mas; // показує []
mas.name; // показує Object {key: "val"}
Подякували: Faraon1

5

Re: Двовимірний масив

І по темі: на скільки я знаю, то у JavaScript масив може мати виключно цифрові індекси, причому допускається лише масиви з правильною послідовністю, наприклад не може бути масив з ключами 0, 2, 3, 7, тільки 0, 1, 2, 3

Подякували: Faraon1

6 Востаннє редагувалося VTrim (09.02.2015 19:21:40)

Re: Двовимірний масив

Готовий код для автора.

<?php 
echo '<script>var mas = [];</script>'; 

 $query_loc = mysql_query("select * from mapa") or die ("stop: ".mysql_error());
        while($row = mysql_fetch_array($query_loc))
        {
            $nameSelo = $row['name'];
            $width_icon = $row['width'];
            $height_icon = $row['height'];
            $x_coord = $row['x'];
            $y_coord = $row['y'];
            echo "<script>
            mas['$nameSelo'] = {
            'x': $x_coord,
            'y': $y_coord,
            'width': $width_icon,
            'height': $height_icon,
             };
             </script>";

//а двовимірний масив думаю знаєте як виводити
Подякували: Faraon1

7 Востаннє редагувалося VTrim (09.02.2015 19:25:42)

Re: Двовимірний масив

ktretyak написав:

І по темі: на скільки я знаю, то у JavaScript масив може мати виключно цифрові індекси, причому допускається лише масиви з правильною послідовністю, наприклад не може бути масив з ключами 0, 2, 3, 7, тільки 0, 1, 2, 3

Шо ви мелите?:)

8

Re: Двовимірний масив

VTrim написав:
ktretyak написав:

І по темі: на скільки я знаю, то у JavaScript масив може мати виключно цифрові індекси, причому допускається лише масиви з правильною послідовністю, наприклад не може бути масив з ключами 0, 2, 3, 7, тільки 0, 1, 2, 3

Шо ви мелите?:)

Ну от ви, як "краще знаючий" продемонструйте нам протилежне. Наведіть простенький код, який створює масив з ключами 0, 2, 3, 7 (не кажучи вже про асоціативні ключі).

9

Re: Двовимірний масив

ktretyak написав:
VTrim написав:
ktretyak написав:

І по темі: на скільки я знаю, то у JavaScript масив може мати виключно цифрові індекси, причому допускається лише масиви з правильною послідовністю, наприклад не може бути масив з ключами 0, 2, 3, 7, тільки 0, 1, 2, 3

Шо ви мелите?:)

Ну от ви, як "краще знаючий" продемонструйте нам протилежне. Наведіть простенький код, який створює масив з ключами 0, 2, 3, 7 (не кажучи вже про асоціативні ключі).

Це?

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas);

</script>

10

Re: Двовимірний масив

VTrim написав:

Це?

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas);

</script>

Ви хоч дивились що саме виводить ваш alert(), запускали скрипт?
https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/arr.png

11

Re: Двовимірний масив

VTrim написав:
ktretyak написав:
VTrim написав:

Шо ви мелите?:)

Ну от ви, як "краще знаючий" продемонструйте нам протилежне. Наведіть простенький код, який створює масив з ключами 0, 2, 3, 7 (не кажучи вже про асоціативні ключі).

Це?

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas);

</script>

Все вірно, поля за індексами які не описали будуть як undefined

12

Re: Двовимірний масив

ktretyak написав:
VTrim написав:

Це?

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas);

</script>

Ви хоч дивились що саме виводить ваш alert(), запускали скрипт?
https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/arr.png

Цікаво,а яке це має значення?
Коли ми можемо вивести так..

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas[3]);

</script>

І все нормально.

13

Re: Двовимірний масив

ktretyak написав:
VTrim написав:

Це?

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas);

</script>

Ви хоч дивились що саме виводить ваш alert(), запускали скрипт?
https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/arr.png

alert малоінформативний, тому, як ви вище написали, раджу користатись console.log

14

Re: Двовимірний масив

Тут треба щоб нам пояснила людина справді знаюча JavaScript, бо браузер в консолі показує таке
https://1933a544b9b651d3813e8de397efcd5a179e17e8.googledrive.com/host/0Bwk9euTxkxYUOFFUS29tSGJ4eXM/replace.org.ua/img/arr-console.png
Тобто якісь незрозумілі згадки, про те, що немає індексів undefined × 1..undefined × 3.

Але якщо я пробую виводити ось так масив

mas.forEach(function(val, index){
    console.log(val, index);
});

то цей же масив виводить:

test0 0
test2 2
test3 3
test7 7

Десь ми тут обоє з вами, VTrim, необізнані...

15

Re: Двовимірний масив

VTrim написав:

Цікаво,а яке це має значення?
Коли ми можемо вивести так..

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas[3]);

</script>

І все нормально.

Це має значення, бо ми із вами сперечаємось про можливість існування в JavaScript непослідовних числових індексів. Те що ви виводите конкретний індекс, як ми зараз бачимо, зовсім не однозначно означає, що не існує інших "прихованих" індексів.

16

Re: Двовимірний масив

ktretyak написав:
VTrim написав:

Цікаво,а яке це має значення?
Коли ми можемо вивести так..

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas[3]);

</script>

І все нормально.

Це має значення, бо ми із вами сперечаємось про можливість існування в JavaScript непослідовних числових індексів. Те що ви виводите конкретний індекс, як ми зараз бачимо, зовсім не однозначно означає, що не існує інших "прихованих" індексів.

:D . . .
Ну введіть alert(mas[1]),то буде undefined,тому,що ми його не встановили.

17

Re: Двовимірний масив

VTrim написав:
ktretyak написав:
VTrim написав:

Цікаво,а яке це має значення?
Коли ми можемо вивести так..

<script>

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';

alert(mas[3]);

</script>

І все нормально.

Це має значення, бо ми із вами сперечаємось про можливість існування в JavaScript непослідовних числових індексів. Те що ви виводите конкретний індекс, як ми зараз бачимо, зовсім не однозначно означає, що не існує інших "прихованих" індексів.

:D . . .
Ну введіть alert(mas[1]),то буде undefined,тому,що ми його не встановили.

Це може бути смішним для чайників, які допускають костилі в своєму коді, а нормальні програмісти мають вміти розбиратись в цих тонкощах.

18

Re: Двовимірний масив

Ну от, запустіть цей скрипт, щоб побачити хто таки був ближчий до істини

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';
 
alert(mas.length);

alert показує кількість елементів в масиві

19

Re: Двовимірний масив

ktretyak написав:

Ну от, запустіть цей скрипт, щоб побачити хто таки був ближчий до істини

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';
 
alert(mas.length);

alert показує кількість елементів в масиві

http://javascript.ru/basic/array
У каждого массива есть свойство length, которое автоматом меняется при каждом обновлении массива. Длина массива - это не количество элементов, а максимальный целый ключ + 1:

20

Re: Двовимірний масив

VTrim написав:
ktretyak написав:

Ну от, запустіть цей скрипт, щоб побачити хто таки був ближчий до істини

var mas = [];
mas[0] = 'test0';
mas[2] = 'test2';
mas[3] = 'test3';
mas[7] = 'test7';
 
alert(mas.length);

alert показує кількість елементів в масиві

http://javascript.ru/basic/array
У каждого массива есть свойство length, которое автоматом меняется при каждом обновлении массива. Длина массива - это не количество элементов, а максимальный целый ключ + 1:

Ну і? А хто доводить протилежне?