Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak uzyskać klucz danego elementu tablicy ?
Cudi
post
Post #1


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

Ostrzeżenie: (0%)
-----


Mam tablice stworzoną przez funkcje file(), jak wiadomo trzyma ona tablice której elementy odpowiadają kolejnym linią w pliku. Chciałbym na początku każdego z elementów dopisać nr. linie w której sie znajduje, tylko niebardzo wiem jak się do tego zabrać (jak uzyskać klucz?) Jest jakieś rozwiązanie oprócz użycia pętli ?
Go to the top of the page
+Quote Post
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Cytat
key() zwraza klucz bieżącego elementu z tablicy asocjacyjnej.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
Cudi
post
Post #3


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

Ostrzeżenie: (0%)
-----


Tak, ale to nie będzie tablica asocjacyjna :] Pozatym dam chyba kod bo cięzko jest mnie zrozumieć. Konstruktor mojej klasy:

[php:1:09e56b662e]<?php
function txt_file($file_name){
if(!file_exists($file_name))
CreateEmptyFile($file_name);

$this->file_name = $file_name;
$this->lines = explode("n", str_replace("r", '', join('', file($file_name))));
$this->cnt = count($this->lines);
unset($this->lines[--$this->cnt]);
}
?>[/php:1:09e56b662e]

I teraz chodzi o to, żeby do każdej linijki (każdego elementu zmiennej klasowej lines) dodąc na początek jego klucz (będzie to poprostu kolejny numer indexu). Czyli jeśli zawartość pierwszej lini w pliku jest taka:
Kod
Cudi|+|cudi@wp.pl

To trzeba by ją zamianić na taką:
Kod
0|+|Cudi|+|cudi@wp.pl

I teraz nie wiem czy da sie to osiągnąć bez użycia pętli, bo w między czasie pomyślałem troche i doszedłem do tego że łatwo to można osiągnąć foreachem ($this->lines as $key => $line) :]

Może jeszcze wyjaśnie po co to wszystko :] Ano klasa ma możliwość wybrania dowolych linijek od do i posortowania ich (używam array_multisort()). A klucz danej linijki normlanie jest jej id, do którego moge sie odnieść usuwająć ją lub edytując. A po sortowaniu klucze sie pomieszają, i potem już nikt nie będzie wiedział co sie zapisze, co updateuje itd :] I teraz próbująć dojść do tego jak temu zapobiec wpadłem na pomysł aby poprostu dodać te klucze na początek linijek i mieć je zgłowy :]
Go to the top of the page
+Quote Post
KaMeLeOn
post
Post #4





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Bez pętli nie dasz rady...

BTW. Na twoim miejscu tworzyłbym
takie id przy zapisie linijki do pliku.
Tzn. pobierasz ostatnią linię sprawdzasz id,
teraz $id++ i po klopocie...


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
Cudi
post
Post #5


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

Ostrzeżenie: (0%)
-----


No właśnie zastanawiam sie cały czas nad tym, bo chce żeby klasa była jak najbardziej funkcjonalna :] I chyba dochodze do wniosku że masz racje. I dzięki że chciało Ci sie to czytać :]
Go to the top of the page
+Quote Post
KaMeLeOn
post
Post #6





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Jeśli zrobiłbyś tak jak chcesz to byłoby to dosyć wolne...
Konstruktor pobierałby za każdym razem plik, liczył wiersze i
uzupełniał. Lepiej mieć już gotowe...


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
Cudi
post
Post #7


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

Ostrzeżenie: (0%)
-----


Masz całkowitą racje, ale czasami gdy człowiek zacznie myśleć jak odchodzić plik o kilka bajtów dochodzi aż tak daleko jak ja, i dobrze że ktoś mnie zatrzymał :]

A teraz pytanie:
To wszystko dzieje sie w klasie, i oczywiście jest też metoda do zapisu tablicy danych. I w tej metodzie trzeba by dopisać żeby w pierwszy element tablicy danych wstawiała kolejną liczbe. Samo uzyskanie liczby nie jest niczym trudnym, ale nie zabardzo wiem jak wsadzić ją na początek tej tablicy, tak żeby reszta elementów sie przesuneła o klucz do przodu :]
Go to the top of the page
+Quote Post
5z474n
post
Post #8





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 2.05.2003

Ostrzeżenie: (0%)
-----


hm......
[php:1:280a510401]// $tab - tablica z tymi liniami

for($i=0; $i<count($tab); $i++) {
$tab[$i] = $id . $tab[$i];
}[/php:1:280a510401]
moze tak ?


--------------------
niczym ten co go nie ma //...........
Go to the top of the page
+Quote Post
Jabol
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


Cytat
array_unshift() wstawia jeden lub więcej przekazanych jako parametry elementów na początek tablicy tablica. Zauważ, że lista elementów wstawiana jako całość, więc elementy zostają w takim samym porządku. Wszystkie klucze liczbowe zostaną zmodyfikowane tak, aby ich wartości zaczynały się od zera, podczas gdy klucze znakowe nie zostaną zmienione.
Go to the top of the page
+Quote Post
Cudi
post
Post #10


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

Ostrzeżenie: (0%)
-----


Nie, bo to nie jest taka tablica jak myślisz :] Ta tablica nie trzyma całego pliku z liniami jako elementów, tylko jedną linię :] A potem leci $dane = join('|+|', $dane); i już mam jako linie którą moge wsadzić do pliku. I w sumie w tym momencie wymyśliłem rozwiązanie problemu, skoro mam już całą linię jako jeden string to wystarczy dać $dane = $id .'|+|'. $dane; i po kłopocie biggrin.gif

Update:
Jabol napisał posta prawie w tym samym momencie co ja więc nie brałem go pod uwage pisząc tą odpowiedź :]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 10:50