Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wartości bitowe i problem
Forum PHP.pl > Forum > PHP
robur
Witam, chciałbym zrobić coś takiego, ale nie mam pomysłu i proszę o pomoc
mam dane zapisane w bazie w postaci $bit_media=11111100000000000000 w sumie 20 pozycji gdzie pierwsza 1 jest wolna a kolejne 1 oznaczają gaz, woda , kanalizacja , prąd , siła.
i teraz chciałbym zrobić takie coś:
  1. <?php
  2. <input type="checkbox" class="radio" name="bit_media[]" value="1" jesli jest w $bit_media na pozycji 2 jedynka to echo "checked";> gaz &nbsp;&nbsp;
  3. <input type="checkbox" class="radio" name="bit_media[]" value="2" jesli jest w $bit_media na pozycji 3 jedynka to echo "checked";> woda &nbsp;&nbsp;
  4. <input type="checkbox" class="radio" name="bit_media[]" value="3" jesli jest w $bit_media na pozycji 4 jedynka to echo "checked";> kanalizacja &nbsp;&nbsp;
  5. <input type="checkbox" class="radio" name="bit_media[]" value="4" jesli jest w $bit_media na pozycji 5 jedynka to echo "checked";> pr&#261;d &nbsp;&nbsp;
  6. <input type="checkbox" class="radio" name="bit_media[]" value="5" jesli jest w $bit_media na pozycji 6 jedynka to echo "checked";> si&#322;a &nbsp;&nbsp;
  7. ?>


z góry dziękuje za podpowiedz
misiek172
nie rozumiem, gdzie tak jedynka?
bit_media[1] tu?
robur
$bit_media=11111100000000000000

1 wolna
1 => gaz
1 => woda
1 => kanalizacja
1 => prąd
1 => siła
0 => wolne
0 => wolne
0 => wolne
i tak dalej
Norbas
Najłatwiej chyba będzie sprawdzać pozycję odpowiedniego znaku w łańcuchu, można również sprawdzać wynik dzielenia
Kod
$str_media = strval(1111100000000000000);
$media = array(
  2 => 'gaz',
  3 => 'woda',
  // ... itd.
);
foreach($media as $k => $v)
  echo '<input type="checkbox" class="radio" name="bit_media[]" value="' .
    ($k - 1) . '"' . ((substr($str_media, $k, 1) == '1') ? ' checked' : '') .
    '>' . $v . '&nbsp; ';
DeyV
warto też pamiętać o tym, że do poszczególnych znaków w stringu można odwołać się również tak:

$bit_media{ 2 } ;
robur
Dzięki Norbas działa elegancko smile.gif
choć zrobiłem jeszcze inaczej
  1. <?php
  2. $query = "SELECT bit_media FROM tr_nieruchomosci WHERE id_pn='$id' AND rodz_transakcji='$rt' ";
  3.  
  4. $result = mysql_query ($query);// or die ("Zapytanie zakończone niepowodzeniem");
  5. $offer = mysql_fetch_assoc($result);
  6.  
  7. // Pobierz słownik
  8. /* Funkcje */
  9. function getBitValue ($dict, $value) {
  10.  $bvalue = '';
  11.  
  12.  for($i=1;$i<6;$i++) {
  13. if($value[$i] == 1) {
  14.  $label = !empty($dict[$i]) ? $dict[$i] : '[-'.$i.'-]';
  15.  $bvalue .= (!empty($bvalue) ? ',&nbsp;&nbsp;<input type="checkbox" class="radio" name="bit_media[]" value="'.$i.'" checked> ' : '<input type="checkbox" class="radio" name="bit_media[]" value="'.$i.'" checked> ') . $label;
  16. }
  17.  if($value[$i] == 0) {
  18.  $label = !empty($dict[$i]) ? $dict[$i] : '[-'.$i.'-]';
  19.  $bvalue .= (!empty($bvalue) ? ',&nbsp;&nbsp;<input type="checkbox" class="radio" name="bit_media[]" value="'.$i.'" > ' : '<input type="checkbox" class="radio" name="bit_media[]" value="'.$i.'" > ') . $label;
  20. }
  21.  }
  22.  
  23.  return $bvalue;
  24. }
  25.  
  26. $query = "SELECT * FROM bit_media_HAUSE_RENT";
  27. $result = mysql_query ($query);// or die ("Zapytanie zakończone niepowodzeniem");
  28. $slownik_bit_media = array();
  29. while ($line = mysql_fetch_assoc($result)) {
  30.  $slownik_bit_media[$line['id']] = $line['nazwa'];
  31. }
  32. mysql_free_result($result); 
  33.  
  34. foreach($offer as $key => $value) {
  35.  
  36.  if($key == 'bit_media') {
  37. <td class="nazwa"> Media:</td>
  38. <td class="opis">'.getBitValue (&$slownik_bit_media, $value).'
  39. </td>
  40.  </tr>';
  41.  } 
  42. }
  43. ?>
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.