Tworzę dwuwymiarową tablicę. W pierwszym wymiarze trzymam tekst a w drugim liczby. Przy dodawaniu nowego wpisu sprawdzam czy nie istnieje taki. Jeśli nie istnieje to dodaje nowy ale jeśli istnieje to zwiększa liczbę z drugiego wymiaru. Jak to zrobić? Kompletnie nie mam głowy :(
Dawaj kod tego co już zrobiłeś...
Ale nie mam kodu, na razie tylko odczyt tekstu na ktorym chce działać. Każdy wyraz oddzielony jest przecinkiem.
Nie potrzebujesz tablicy dwuwymiarowej. Wystarczy asocjacyjna:
$arr = array('foo' => 1, 'bar' => 1);
if (!isset($arr['foo']))
{
$arr['foo'] = 1;
}
else
{
$arr['foo']++;
}
Ale problem jest w tym, że tablica ma być tworzona dynamicznie :)
Co to znaczy dynamicznie? To nie jest C++.
Jeśli masz na myśli, że będziesz mógł dodawać nowe pozycje, to powyższy kod jest dobry, tylko trzeba go było rozpisać. Np.
function add2arr(&$arr, $name)
{
if (!isset($arr[$name]))
{
$arr[$name] = 1;
}
else
{
$arr[$name]++;
}
}
$arr = array();
add2arr($arr, 'bidulek');
add2arr($arr, 'bidulek');
add2arr($arr, 'programista');
print_r($arr);
Funkcja add2arr
realizuje dodawanie elementu (lub zwiększanie licznika), pod nią masz normalny kod. Możesz go sobie dowolnie modyfikować.
Linijka print_r($arr);
to po prostu wypisanie całej tablicy, żeby sprawdzić jak operacje zostały wykonane.
O kod specjalnie prosiłem, żeby się zorientować czy pytający w ogóle się orientuje w temacie...
Dzięki wielkie! Mam jednak jeszcze jedno pytanie. Wszędzie opisane jest jak odczytywać elementy z tej tablicy za pomocą foreach. Ja chciałbym po posortowaniu wyświetlić tylko 10 pierwszych. Jak zastosować pętle **for **?
Pętla foreach
z limitem:
$count = 0;
foreach ($arr as $key => $value)
{
if ($count++ == 10) break;
echo $key.' '.$value.'<br />';
}
Jeśli klucze są numeryczne to możesz użyć for
w ten sposób:
for($i=0; $i<11; $i++) {
echo($tablica[$i] . '<br />');
}
W każdym razie bardziej polecam używanie foreach
- jest przejrzystsza.