Jump to content
php.lv forumi

PHP masīvs


Pieduriens

Recommended Posts

x ass

12345678910

1 xxxxxxxxxx

2 xxxxxxxxxx

3 xxxooooxxx y

4 xxxooooxxx ass

5 xxxooooxxx

6 xxxxxxxxxx

7 xxxxxxxxxx

8 xxxxxxxxxx

9 xxxxxxx9xx

10xxxxxxxxxx

 

1. Kā izveidot masīvu, kurā ir šie 100x, lai vajadzības gadijumā varētu apstrādāt katru x ar citu vērtību.

2. Kā no šī masīva izviklt x=8, y=9, apzīmēju ar 9

3. Kā sagrubēt masīvu masivā, lai piemēram iegūtu lauku no (x=4-7)(y=3-5) - apzīmēju šo apgabalu ar o

 

Paldies.

Edited by Pieduriens
Link to comment
Share on other sites

1)

$elements = "xxxxxxxxxx" +
		"xxxxxxxxxx" + 
		"xxxooooxxx" + ...; // utt visus par rindām saraksti

2) echo $elements[($y-1)*10 + ($x-1)];

3) vienkāršākajā veidā - ar diviem for cikliem pa x un y asīm

Link to comment
Share on other sites

bubu, kā Tu ieteiktu katras vienības kārtošanu, ņemot vērā, ka 100x ir tikai paraugs.

Katram x`am, ja sākotnējais x skaits būs pie 50k, nerakstīs tak katrai savu adresi ?

Ideju attīstot varētu nodefinēt x un y asi, kurā x*y== vienību skaits, automātiski katrai vienībai adrese ?

Edited by Pieduriens
Link to comment
Share on other sites

Par kādām adresēm tu runā? Ja tev datu apjoms ir liels, tad der padomāt par citu datu struktūru. Viss atkarīgs no tā, ko tu taisies iesākt ar tiem datiem, kas ir tajā matricā.

Tu prasīji par 10x10 lauciņu, tam prasts strings ir vairāk nekā pietiekoši ;)

Link to comment
Share on other sites

Adrese = katram x, kur x satur dažādas vērtības, attiecīgi, katram x vēlams savs id datubāzē, jo šīs vērtības mainīsies. Konstanti uz vietas paliek tikai laukums, līdz visi x ir aizņemti, līdz ar to vēlams lai var piekabināt klāt jaunus apgabalus.

10x10 ir tikai kā piemērs formulas izveidei...

Kādi prātā nāk citi datu struktūras veidi ?

Edited by Pieduriens
Link to comment
Share on other sites

Ja tajā matricā ir daudz neizmantoti elementi, bet tikai dažas rūtiņas ir aizņemtas, tad ir daudz viedu. Tas saucās Sparse Matrix.

Būtība tāda, ka tu glabā nevis visu matricu, bet tikai sarakstu ar aizņemtajiem elementiem un to adresēm, tipa (vienkārši izsakoties):

(0, 1) -> "a"

(5, 6) -> "b"

...

Tas nozīmē, ka adresē y=0,x=1 atrodas "a", adresē y=5, x=6 atrodas "b".

Ja parasti savā matricā rakstīsi kvadrātaina izskata aizņemtos elementus, tad vajag glabāt aizņemto četrstūrīšu sarakstu:

(1, 2, 5, 6) -> "aabcddaa..."

Tas nozīmē, ka četrstūrī y=1..5, x=2..6 atrodas dati ar saturu (katrā rūtiņā pa vienam elementam) "aabcd...".

utt..

Wikipēdijā parādīts vēl viens - Yale Sparse Matrix Format.

Varianti ir daudz. Te vēl lasāmais: http://www.cs.utk.edu/~dongarra/etemplates/node372.html

Kā jau saku - izvīgākais formāts ir atkarīgs no tā, kādi ir dati un kādas operācijas taisies veikt ar elementiem.

Link to comment
Share on other sites

Ja tajā matricā ir daudz neizmantoti elementi, bet tikai dažas rūtiņas ir aizņemtas,

Katra matrica neizmantotā (nenoteiksmē) satur aukstākais 3-4 vērtības, līdz ar to katra matrica ir jāparāda...

ceru, ka saprotam viens otru :)

Link to comment
Share on other sites

Tev ir vairākas matricas? Matrica ir tas, ko tu agstak rādīji - viena kvadrtātaina tabula. Par matricas elementu sauc vienu no tiem taviem "x" vai "o", kas atrodas vienā tabulas rūtiņā.

 

Tad tev sparse matricas nederēs, ja nav neizmantotu elementu.

A kas tev tiešām tur būs 50k*50k elementu? Tas ir vien ir ~250MB, ja katrs matricas elements aizņem 1 baitu. Tu tiešām katram lietotājam tādu kvantumu taisies lādēt atmiņā? Tas nav reāli. Tev noteikti tie dati jāglabā kur citu un jāoperē ar tiem savādāk, nevis ar prastām php funkcijām.

Link to comment
Share on other sites

Tev ir vairākas matricas? Matrica ir tas, ko tu agstak rādīji - viena kvadrtātaina tabula. Par matricas elementu sauc vienu no tiem taviem "x" vai "o", kas atrodas vienā tabulas rūtiņā.

Nu beidzot sāku saprast, atvainojos par savu stulbumu.

labojums, nevis matricas pievienošana bet elemntu apgabalu pievienošana matricai, matricas iztiepšana...

Edited by Pieduriens
Link to comment
Share on other sites

<?
 $matrica = "01 02 03 04 05 06 07 08 09 10"
            "11 12 13 14 15 16 17 18 19 20"
            "21 22 23 24 25 26 27 28 29 30"
            "31 32 33 34 35 36 37 38 39 40"
            "41 42 43 44 45 46 47 48 49 50"
            "51 52 53 54 55 56 57 58 59 60"
            "61 62 63 64 65 66 67 68 69 70"
            "71 72 73 74 75 76 77 78 79 80"
            "81 82 83 84 85 86 87 88 89 90"
            "91 92 93 94 95 96 97 98 99 100"

$01= {
 $cena=87567425;
 $statuss=brivs;
 $apraksts=1;
 }

 ?>    

 

Idejiski pareiza doma ?

Edited by Pieduriens
Link to comment
Share on other sites

Nesapratu. Ne tur sintakse korekta, ne imho tev strings kā matrica derēs. Ja vajag vairākus datus glabāt, tad nāksies veidot masīvu no objektiem (vai asociatīvajiem masīviem):

$masivs = array(new Element(87567425, "brivs", 1), new Element(...), ...);
// vai
$masivs = array({"cena":87567425, "statuss": "brivs", "apraksts":1}, {...}, ...);

 

Bet nopietni apdomā aizņemto atmiņas daudzumu uz katru pieprasījumu, glabājot datus šādā supermasīvā..

Link to comment
Share on other sites

  • 3 weeks later...

Paspēlējos ar šo, no mazliet savādākas puses.

Ņemot par pamatu, ka katram info tipam ir sava sql tabula:

 

$=x (x ass izmērs garumā-skaitlis)

$=y (y ass izmērs platumā-skaitlis)

$laukumaizmērs=$x*$y

 

Tikai apstājos pie šīs domas, kas tad man tagat sadalīs katru iegūto vienību no matricas, pa vienam + adresi.

 

$vienibasid (x2;y5) utt.

$vienibascena ($vienibasid; cena)

 

Kā tas varētu izskatīties uz mysql?

Paldies!

Edited by Pieduriens
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...