• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Segregowanie tablicay w PHP

VPS Starter Arubacloud
0 głosów
559 wizyt
pytanie zadane 24 kwietnia 2015 w PHP przez januszek1234 Nowicjusz (120 p.)
Witam.

Mam w PHP tablicę $mojaTablica w której jest dużo słów, powiedzmy 10000, słowa się powtarzaj. Jak powinna wyglądać pętla/skrypt która zamieni mi $mojaTablica na tablicę np. $gotowa (wielowymiarowa[2]) która będzie przechowywała dane w taki sposób:
$gotowa[0]['slowo'] = 'przykładowe_słowo';

$gotowa[0]['ile'] = '12'; //ile razy te słowa powtórzyło się w tablicy $mojaTablica

 

Mam nadzieję że rozumiecie o co mi chodzi.

2 odpowiedzi

+1 głos
odpowiedź 24 kwietnia 2015 przez Boshi VIP (100,240 p.)
Czym jest slowo w indexie? to jest  wartość z tablicy jednowymiarowej czy jak ?  jeżeli tak to można to zapisać bęz pętli i komplikowania (jak pokazał efik niżej ;D )
komentarz 24 kwietnia 2015 przez efiku Szeryf (75,160 p.)

Ty, racja, 

array_count_values

:D
NIe programuj na kacu ;_; haha :D

Si?

komentarz 24 kwietnia 2015 przez Boshi VIP (100,240 p.)
edycja 24 kwietnia 2015 przez Boshi

Si :)  ponadto są takie funkcje jak

array_fill_keys czy array_chunk

Nie wiem tylko co autor miał dokładnie na myśli, bo niezrozumiałe to trochę jest.. Czym jest słowo?  to jest wartość tablicy jako klucz?  autor ma zamiar zapisywać do  nowej tablicy wartości w pętli jakieś? 

Ponadto zliczanie ilości to już jest tablica trójwymiarowa->bo  chcąc zliczyć każdy wyraz tworzymy kolejną tablicę która jest pod indexem 0['ile'] a więc potem odwołujemy się 0['ile']['klucz'];

 

Takie coś wymodziłęm, nie wiem czy o to autorowi chodzi;]

     $tablica1=['marzena','kot','pies','krowa','krowa'];


        $kardynalnosc=array_count_values($tablica1);
        $klucze[0]=array_fill_keys($tablica1,'');
        $klucze[0]['ile']=$kardynalnosc;




        echo '<pre>';
        print_r($klucze);
        echo '</pre>';

Odwołujemy się teraz $klucze[0]['klucz']='jakies slowo';

komentarz 24 kwietnia 2015 przez efiku Szeryf (75,160 p.)
Ja mysle ze ma to tak : array ( a , b, c ,d ,a , c ,b ,f ,g , g , d , e )   

i pozniej tak jak tam dalej ze dla slowa np a ilosc wystapien to  2 itd:)

Czekamy na dalsze instrukcje :o

Haha vote up !
komentarz 24 kwietnia 2015 przez Boshi VIP (100,240 p.)

Odpal mój kod i zobacz wynik, chyba o to mu biega :)  inaczej nie da się chyba tego zapisać jako tablicy dwuwymiarowej, albo inaczej da się, ale nie pod tym samym indexem->czyli 0 bo wtedy tworzy się tablica tablic a w niej kolejna tablica->

 

$klucze[1]=$kardynalnosc; wystarrczy tak zmienić i odwołujemy się  $klucze[1]['nazwaklucza'];

 

Mam nieodparte wrażenie, żę autor nie bardzo rozumie tablice dwuwymiarowe gdyż chce na jednym indexie upiec dwie sroki. Tj. Wykorzystać index 0 jako klucz dla wartosci oraz jako licznik ilosci każdego słowa-> zapomniał tylko o zliczeniu słów i tutaj jest ukryta 3 tablica pod identycznym idexem :)

komentarz 24 kwietnia 2015 przez efiku Szeryf (75,160 p.)
Boshi nie wiem czy o takie coś mu chodziło :D http://prntscr.com/6xq4um
komentarz 24 kwietnia 2015 przez efiku Szeryf (75,160 p.)
a w sumie, rozwiązanie jest w tych 2 odpowiedziach:)

nie ma gotowego kodu :o haha :D

Trzeba myśleć :)
komentarz 24 kwietnia 2015 przez Boshi VIP (100,240 p.)
Jak odpaliłeś debugger to co się dziwisz, że wywaliło 3 tablice na ekran ;D
 Odpal to w localhoscie normalnie. Masz  jedną dwuwymiarową tablicę  gdzie index 0['ile'] zawiera kolejną tablicę o wybranych kluczach podających ilości slow.
komentarz 24 kwietnia 2015 przez januszek1234 Nowicjusz (120 p.)

Dzięki wam wielkie ;)
Ostatecznie użyłem tylko:
 

$kardynalnosc=array_count_values($mojaTablica);
$klucze=$kardynalnosc;

a następnie:
 

foreach ($kardynalnosc as $key => $value)

gdzie

$key = 'slowo';

$value = '124'; //ile razy sie powtórzyło

 

komentarz 25 kwietnia 2015 przez Boshi VIP (100,240 p.)
Proszę bardzo :)
0 głosów
odpowiedź 24 kwietnia 2015 przez efiku Szeryf (75,160 p.)
edycja 24 kwietnia 2015 przez efiku

Cześć nie kontaktuje jeszcze dobrze, ale myślę, że powinieneś zrobić tak:

1.pobrac sobie rozmiar tablicy  $myArray do jakiejś zmiennej, a także zainicjować $readyArray = array(); 

2 Petla foreach gdzie $key jest indexem, a $value słowem

3. w tej petli 

1. $readyArray[$key]['word'] = $value

2. $readyArray[$key]['count'] = 0;

3. pętla for od 0 do zmiennej gdzie miales pobrany rozmiar tablicy $myArray, licznik++

1. Jeśli $readyArray[$key]['slowo'] == $myArray[$index]  , $readyArray[$key]['count'] ++

4. koniec petli for

4 koniec foreach 

5. Wyswietl sobie ladnie tablice $readyArray print_r'em 

6. array_count_values zobacz co sie stanie jak do tej funkcji wsadzisz tablice ze slowami 

Na chwilę obecną to mi przychodzi do głowy, wybacz, ale gotowego kodu nie dostaniesz, bo się niczego nie nauczysz. :)

Podobne pytania

0 głosów
0 odpowiedzi 667 wizyt
0 głosów
0 odpowiedzi 91 wizyt
pytanie zadane 16 lutego 2021 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 500 wizyt
pytanie zadane 8 czerwca 2016 w C i C++ przez Filius Gaduła (4,120 p.)

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...