Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Warunkowe dodawanie zmiennych
Therminus
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Mam taką tabelkę ze zmiennymi:
  1. echo '<tr >
  2. <td align="center">'.$wiersz2['Status_A'].'</td>
  3. <td align="right">'.$wiersz2['Pow_Uzyt_A'].'</td>
  4. <td align="center">'.$wiersz2['Status_B'].'</td>
  5. <td align="right">'.$wiersz2['Pow_Uzyt_B'].'</td>
  6. <td align="center">'.$wiersz2['Status_C'].'</td>
  7. <td align="right">'.$wiersz2['Pow_Uzyt_C'].'</td>
  8. ...
  9. <td align="right">'.($wiersz2['Pow_Uzyt_A'])+
  10. ($wiersz2['Pow_Uzyt_B'])+
  11. ($wiersz2['Pow_Uzyt_C'])+
  12. ...
  13.  
  14. .'</td>
  15. </tr>';

W sumie 8 pozycji (do litery "H")
Problem w tym, że na końcu muszę dodać te zmienne (wiersz 9 i dalsze w przedstawionym kodzie) pod warunkiem, że...
i tutaj zaczynają się schody.
Zmienna $wiersz2['Pow_Uzyt_A'] ma być brana pod uwagę w dodawaniu tylko wtedy, kiedy zmienna $wiersz2['Status_A'] = 'A' .
I analogicznie wartość ze zmiennej $wiersz2['Pow_Uzyt_B'] będzie dodawana, jeżeli zmienna $wiersz2['Status_B'] = 'B' i tak dalej.
W bazie pole w kolumnach "Status_[A...H]" po prostu zawiera tylko jedną literę (A...H) lub jest puste.
Jak to zrobić?

Ten post edytował Therminus 24.08.2022, 13:23:50
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
gino
post
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 52
Dołączył: 18.02.2008

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


@Salvation troszkę się przyczepię do tej funkcji.
Mnie uczono na studiach, że funkcja napisana dobrze poza oczywistymi przypadkami ma być nienaruszalna.
A co jeśli kodującemu przyjdzie ochota rozszerzyć zakres dajmy na to do K? Tablica ta powinna być argumentem funkcji. Po co też dodatkowa funkcja mb_strtoupper? Nie można od razu tablicy z dużymi literami zdefiniować?
Sorki, że się czepiam, ale jeśli chodzi o kod to troche pedantyczny jestem a że wywodzę się z C to operatory trójargumentowe jakoś same mi się piszą :)

Kod
function summary(array $chars, array $row): int
{
    $sum = 0;
    
    foreach($chars as $char) {
        $status = (string)($row['Status_' . $char] ?? '');
        $userPower = (int)($row['Pow_Uzyt_' . $char] ?? 0);
        
        $sum += ($status === $char) ? $userPower : 0;
    }
    
    return $sum;
}

$chars = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'];
$array = [
    'Status_A' => 'A',
    'Pow_Uzyt_A' => 10,
    'Status_B' => 'B',
    'Pow_Uzyt_B' => 25,
    'Status_C' => '',
    'Pow_Uzyt_C' => 100,
];

echo summary($chars, $array);


Ten post edytował gino 27.08.2022, 06:48:14
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 406
Pomógł: 73
Dołączył: 15.07.2014

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


Cytat(gino @ 27.08.2022, 07:46:38 ) *
Mnie uczono na studiach, że funkcja napisana dobrze poza oczywistymi przypadkami ma być nienaruszalna.

Też kończyłem studia i takich głupot nie słyszałem na wykłądach.

Cytat(gino @ 27.08.2022, 07:46:38 ) *
A co jeśli kodującemu przyjdzie ochota rozszerzyć zakres dajmy na to do K? Tablica ta powinna być argumentem funkcji.

Jak dla mnie, niepotrzebne rozszerzenie o argument. Sama tablica powinna być "zamknięta" w funkcji, bo to jest baza funkcji.
+ Nie programuje się na zapas. Jest to jedna z zasad dobrych praktyk (IMG:style_emoticons/default/wink.gif)

Cytat(gino @ 27.08.2022, 07:46:38 ) *
Po co też dodatkowa funkcja mb_strtoupper? Nie można od razu tablicy z dużymi literami zdefiniować?

Można. Szybciej mi jednak było użyć małych liter i skorzystać z funkcji (IMG:style_emoticons/default/biggrin.gif) - z założenia też wychodzę, że to co "przyjmę" jest z małych liter.
Równie dobrze możesz użyć stringa i iterować po tym :shrug: Rozwiązanie zależy od autora (IMG:style_emoticons/default/wink.gif)

A żeby było prawilniej i z zachowaniem typowania od początku, to $row powinno być VO, ale wiadomo jak to jest z "projektami do szuflady" i nauką (IMG:style_emoticons/default/wink.gif)

Ten post edytował Salvation 28.08.2022, 22:40:16
Go to the top of the page
+Quote Post

Posty w temacie
- Therminus   [PHP] Warunkowe dodawanie zmiennych   24.08.2022, 13:20:55
- - trueblue   Użyj funkcji if.   24.08.2022, 13:25:55
- - Salvation   [PHP] pobierz, plaintext <?php declare...   24.08.2022, 15:52:52
|- - Therminus   [quote name='Salvation' date='24.08.20...   25.08.2022, 13:04:34
|- - Salvation   Cytat(Therminus @ 25.08.2022, 14:04:3...   25.08.2022, 17:17:16
- - nospor   CytatPS. Czy ktoś może wyłączyć parsowanie na emot...   24.08.2022, 15:58:50
|- - Salvation   Cytat(nospor @ 24.08.2022, 16:58:50 )...   24.08.2022, 16:00:58
- - nospor   ps: oj ta funkcja co naskrobales to chyba cos ci n...   24.08.2022, 16:01:39
- - Salvation   Niby dlaczego? Wszystko dobrze jest wg mnie: https...   24.08.2022, 16:08:43
- - nospor   A widzisz, nie doczytalem o co chodzilo autorowi. ...   24.08.2022, 16:11:59
- - nospor   Czemu zrobiles mysqli_fetch_array $row ? Prz...   25.08.2022, 13:56:59
|- - Therminus   Cytat(nospor @ 25.08.2022, 14:56:59 )...   26.08.2022, 12:17:08
- - nospor   CytatMam wywalone, bo mnie w LAN nikt atakował nie...   26.08.2022, 12:30:16
|- - Therminus   Cytat(nospor @ 26.08.2022, 13:30:16 )...   26.08.2022, 13:16:03
- - nospor   Skoro masz biala strone to sprawdz logi, jakis bla...   26.08.2022, 13:27:01
|- - Therminus   Cytat(nospor @ 26.08.2022, 14:27:01 )...   26.08.2022, 13:51:19
- - nospor   CytatPHP Fatal error: strict_types declaration mus...   26.08.2022, 13:57:17
|- - Therminus   Cytat(nospor @ 26.08.2022, 14:57:17 )...   26.08.2022, 14:18:49
|- - Salvation   Cytat(nospor @ 26.08.2022, 13:30:16 )...   26.08.2022, 14:30:08
- - nospor   No bo w kodzie masz $userPower = (int)(...   26.08.2022, 14:24:21
|- - Therminus   Cytat(nospor @ 26.08.2022, 15:24:21 )...   26.08.2022, 14:58:08
- - nospor   CytatJak znam życie, to ten plik co umieściłeś w t...   26.08.2022, 14:35:55
- - nospor   nie style= "font-weight: bold", "co...   26.08.2022, 15:01:19
|- - Therminus   Cytat(nospor @ 26.08.2022, 16:01:19 )...   26.08.2022, 15:24:04
- - trueblue   style= "font-weight: bold; color:blue"   26.08.2022, 15:29:19
|- - Therminus   Cytat(trueblue @ 26.08.2022, 16:29:19...   26.08.2022, 16:18:48
- - nospor   Oczywiscie sredni a nie przecinek jak raczyl popra...   26.08.2022, 15:37:03
- - gino   @Salvation troszkę się przyczepię do tej funkcji. ...   27.08.2022, 06:46:38
|- - Salvation   Cytat(gino @ 27.08.2022, 07:46:38 ) M...   28.08.2022, 20:49:16
- - gino   Może inaczej ujmę nienaruszalność, chodzi o to, że...   29.08.2022, 14:42:21
- - Salvation   Nie wiem w ogóle skąd pomysł na CR w wątku to nie...   29.08.2022, 15:19:35


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

 



RSS Aktualny czas: 13.10.2025 - 12:37