Jump to content
php.lv forumi

Infa no rindiņām


rudzis

Recommended Posts

Pavisam vienkārša lieta:

pirmais:::1:::2:::3
otrais:::4:::5:::5
tresais:::7:::8:::9
ceturtais:::10:::11:::12

(rindiņas atdalās ar newline).

 

Tātad, vajag, lai zinot, kādas mainīgajā noteiktas rindas pašu pirmo masīva elementu, explodējot pēc ::: varētu dabūt arī noteiktas pārējās šīs rindiņas vērtības.

 

Piem., ja es gribu kaut ko no trešās (norādot pirmo elementu "tresais"), lai kaut kādā veidā varētu parādīt konkrēti 7, 8 vai 9.

 

Neder man norādīt rindiņas skaitu. Vajag atrast īsto rindu tieši pēc paša pirmā tās elementa.

 

Zinu, murgains jautājums. Pats ilgi domaju, ka lai to izstāsta. ;)

Link to comment
Share on other sites

kautka taa:

$failamasivs - file('tavs fails');

foreach($failamasivs in $rinda) {
  $rindaselementi = ecplode(':::', $rinda);
 $masivs[$rindaselementi[0] = $rindaselementi;
}

print_r($masivs['tresais']);

Link to comment
Share on other sites

Aha, man veelviens jaut.

 

Kaa samekleejot peec pirmaa elementa eertaak manipuleet ar visu rindu? Shajaa gadiijumaa vienkaarshi izmest?

Var jau kaut kaa uzzinaat kaartas skaitli failaa tai rindai un tad visu paareejo paarrakstiit, bet varbuut var vienkaarshaak?

Link to comment
Share on other sites

Kaut kāds murgs ar tiem masīviem.

 

Ar unset pietiek, lai dabūtu ārā no masīva, bet viss masīvs ir fails. Man vajag arī visu atlikušo masīva daļu rakstīt atpakaļ failā. Mēģināju ielasī to failu kā masīvu, pēc tam visa šitā štelle ar ielasīšanu pēc pirmā elementa, un tad unset'oju nevajadzīgo rindu., bet pēc tam atkal faila saturu bāzt atpakaļ, tomēr izmestā rinda nepazūd, jo unsetojas tikai uz doto mirkli.

 

Kā lai es dabūju atsevišķā mainīgajā visu masīvu bez unset'otās rindas? :huh:

Link to comment
Share on other sites

Pāņem to masīvu $fails un nokopē:

$fails_copy = $fails;

 

Visu infu tu čakarē tam _copy, bet kad nepieciešams atgriezt atpakaļ, tad izmanto $file. Cerams, ka domu saprati :)

Link to comment
Share on other sites

Te jau nesen tādu kodu jau kādam deva!

 // ielasa failu:
 $mas = file('data.txt'); // $mas tagad ir masīvs dari ko gribi ar viņu
 unset($mas[100]); // izdzēšam 101. rindu

 $f = fopen('data.txt', 'w'); // atveram rakstīšanai

 foreach($mas as $m) {  // ierakstam katru rindu atpakaļ
   fwrite($f, $m . "\n");
 }

 fclose($f); // aizveram failu

 

Citēju tevi "viss masīvs ir fails", nē, masīvs nav fails. Dati ir vai nu masīvā, vai failā, un tu daries ar vieniem datiem tikai. Bet līdzko tu tos pamaini, tad tev viņi loģiski, ka jāsaglabā atpakaļ. Kā tad citādāk tu to biji iedomājies?

Link to comment
Share on other sites

Izmēģināju dažādus variantus, bet nevaru atrsat kļūdu ;)

$user = "tresais" // piemeeram....

$visi = fopen('tiri/piri/fails.txt', 'a'); // mēģināju ar pārrakstīšanu (w) - fails tukšs....

$lietotaji = file('tiri/piri/fails.txt);
foreach($lietotaji as $lietotajs) {
$ieraksti = explode(':::', $lietotajs);
$viss[$ieraksti[0]] = $ieraksti;
unset($viss[$user]);

foreach($visi as $useri) {
fwrite($visi, $useri);

$fails = fopen('tiri/piri/fails.txt', 'a');
$jaunais = 
"$tresais:::$ceturtais:::$utt\n";
fwrite($fails, $jaunais);

fclose($fails);
fclose($visi);
}
}

Nu viss it kā ir, bet man nepielec kādā kārtībā to visu sakārtot, lai vispirms vienu elementu izmestu, pēc tam uztaisītu jaunu, tikai ar jaunajām vērtībām mainīgajos, un tad ierakstīt atpakaļ?

 

Varbūt vēl ir kāds veids, lai nepierakstītos beigās, bet nomainītos tieši tas pats, un masīvs saglabātu visu kārtību?

Link to comment
Share on other sites

Tev tak tur ir absolūts sviests. Ciklu murgi! Sadali kodu 3 daļās:

1) nolasa failu

2) izdzēš masīva elementu

3) ieraksta atpakaļ

Tagad loģiski padomā, ko katrai daļai ir jādara pa vienai koda rindiņai. Ievēro! šīs daļas ir neatkarīgas viena no otras (atšķirībā no tava koda), kur 2 un 3 daļa ir zem 1 daļas. Tb lasīšanas laikā tiek kautkas dzēsts un rakstīts atpakaļ.

Link to comment
Share on other sites

×
×
  • Create New...