Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]grupowanie elementów array
Forum PHP.pl > Forum > Przedszkole
peklo
Witam
Mam pytanie jak można zgrupować elementy tablicy.
Teraz po pobraniu i wyswietleniu danych mam cos takiego.
Array
(
[user] => ja
[user_id] => Array
(
[0] => Array
(
[username] => ja
[action] => 1
)
[1] => Array
(
[username] => ja
[action] => 2
)
[2] => Array
(
[username] => ja
[action] => 4

)

)

)

jak teraz zgrupować tą tablicę żebym uzyskał coś takiego
[0] => Array
(
[username] => ja
[action] => 1
[action] => 2
[action] => 4
)

Dane pobieram mniej więcej tak:
  1. $sql = "SELECT * from......";
  2. $stmt = $pdo->prepare( $sql );
  3. $stmt->execute();
  4. $valid = $stmt->fetchAll();
  5. if( $valid ) {
  6. $success = true;
  7. $_SESSION['user']=$this->username;
  8. $_SESSION['user_id'] = $valid;
  9. }
  10.  
  11. $con = null;
  12. return $success;
  13. }catch (PDOException $e) {
  14. echo $e->getMessage();
  15. return $success;
  16. }
KsaR
Możesz tak o ile klucze tablicy są stałe..

  1. # ( $arr to nazwa twojej tablicy ).
  2. $arrayNew=array(0=>array('username'=>$arr['user_id'][0]['username'],
  3. 'action_1'=>$arr['user_id'][0]['action'],
  4. 'action_2'=>$arr['user_id'][1]['action'],
  5. 'action_3'=>$arr['user_id'][2]['action'])
  6. );


Powinno działać identycznie z tym co pisałeś.
Jednak klucze zmieniłem zamiast twojego action na ponumerowane, poniewaz klucze powinny byc unikalne.
peklo
zrobiłem coś takiego

  1. $tmp = array();
  2. foreach($valid as $arg)
  3. {
  4. $tmp[$arg['username']][] = $arg['action'];
  5. }
  6. $output = array();
  7. foreach($tmp as $username => $labels)
  8. {
  9. $output[] = array(
  10. 'username' => $username,
  11. 'action' => $labels
  12. );
  13. }


Powstała taka tablica
Array
(
[user_id] => Array
(
[0] => Array
(
[username] => mariusz
[action] => Array
(
[0] => 1
[1] => 2
[2] => 7
)
)

)

)
Problem polega na tym, że gdy zmieni mi się liczba kluczy action to np liczba 7 nie będzie już jako [2]=>7 tylko może być np jako [5]=>7
Teraz wywołuje to w ten sposób if($_SESSION['user_id'][0]['action'][2]==7). Czy da się jakoś inaczej to wywołać i sprawdzi ten warunek zeby zapis nie wyglądał tak ['action'][2]==7, a tak ['action']==7
Tuminure
Cytat(peklo @ 1.07.2015, 09:19:09 ) *
Czy da się jakoś inaczej to wywołać i sprawdzi ten warunek zeby zapis nie wyglądał tak ['action'][2]==7, a tak ['action']==7

  1. in_array(7, $_SESSION['user_id'][0]['action'])

To sprawdzi, czy liczba 7 znajduje się w tablicy action.
peklo
dzięki serdeczne chyba o to mi chodziło smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.