ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   отключение элементов (php) (https://forum.antichat.xyz/showthread.php?t=783910)

root@localhost:~# 27.06.2022 11:38

недавно начал учить php

есть функция которая парсит из базы итемы, я сделал условия которые будут отключать некоторые символы в случае если допустим итем 1 - у него отключается вывод количества, или если итем не точенный у него не выводится заточка

пример

так вот, хотелось бы узнать насколько это костыльно у меня это реализовано, можно ли так пускать на лайв, и как лучше в целом это сделать?

кусок кода:

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
$before
=
'('
;
$after
=
')'
;
$plus
=
' +'
;
if
(
$row
-
>
enchant
==
0
)
{
unset
(
$row
-
>
enchant
)
;
unset
(
$plus
)
;
}
if
(
$row
-
>
amount
==
1
)
{
unset
(
$row
-
>
amount
)
;
unset
(
$before
)
;
unset
(
$after
)
;
}
echo
'
item_name
.
' '
.
$before
.
$row
-
>
amount
.
$after
.
$plus
.
$row
-
>
enchant
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}


Mex-Vision 27.06.2022 12:17

Цитата:

Сообщение от root@localhost:~#

недавно начал учить php
есть функция которая парсит из базы итемы, я сделал условия которые будут отключать некоторые символы в случае если допустим итем 1 - у него отключается вывод количества, или если итем не точенный у него не выводится заточка
пример

так вот, хотелось бы узнать насколько это костыльно у меня это реализовано, можно ли так пускать на лайв, и как лучше в целом это сделать?
кусок кода:

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
$before
=
'('
;
$after
=
')'
;
$plus
=
' +'
;
if
(
$row
-
>
enchant
==
0
)
{
unset
(
$row
-
>
enchant
)
;
unset
(
$plus
)
;
}
if
(
$row
-
>
amount
==
1
)
{
unset
(
$row
-
>
amount
)
;
unset
(
$before
)
;
unset
(
$after
)
;
}
echo
'
item_name
.
' '
.
$before
.
$row
-
>
amount
.
$after
.
$plus
.
$row
-
>
enchant
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}


Я бы конечно сделал вот так.

Кода меньше и код гораздо читаемый, как мне кажется.

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
$enchantStr
=
''
;
$amountStr
=
''
;
if
(
$row
-
>
enchant
>
0
)
$enchantStr
=
' +'
.
$row
-
>
enchant
;
if
(
$row
-
>
amount
>
0
)
$amountStr
=
' ('
.
$row
-
>
amount
.
')'
;
echo
'
item_name
.
$amountStr
.
$enchantStr
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}

Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.

root@localhost:~# 27.06.2022 12:19

Цитата:

Сообщение от Mex-Vision

Я бы конечно сделал вот так.
Кода меньше и код гораздо читаемый, как мне кажется.

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
$enchantStr
=
''
;
$amountStr
=
''
;
if
(
$row
-
>
enchant
>
0
)
$enchantStr
=
' +'
.
$row
-
>
enchant
;
if
(
$row
-
>
amount
>
0
)
$amountStr
=
' ('
.
$row
-
>
amount
.
')'
;
echo
'
item_name
.
$amountStr
.
$enchantStr
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}

Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.

хм, тоже неплохо, не додумался почему то

Mex-Vision 27.06.2022 12:22

Цитата:

Сообщение от root@localhost:~#

хм, тоже неплохо, не додумался почему то

Я просто уже не помню до конца, но если включить варнинги в php, скорее всего будет ругаться на обращение к перменной которая не установлена. А вы как раз обращаетесь к переменным которые удалили функцией unset

Попробуйте включить ошибки:

ini_set('display_errors', 1);

error_reporting(E_ALL);

и отработать свой код, будут ли варнинги.

òbiòbi верифицированный пользователь. 27.06.2022 12:29

или так

PHP:


Код:

$items
=
$result
-
>
fetchAll
(
PDO
:
:
FETCH_OBJ
)
;
foreach
(
$items
as
$item
)
{
$title
=
$item
-
>
item_name
;
if
(
$item
-
>
enchant
>
0
)
$title
.
=
' +'
.
$item
-
>
enchant
;
if
(
$item
-
>
amount
>
0
)
$title
.
=
' ('
.
$item
-
>
amount
.
')'
;
echo
'
item_type
.
'.jpg" width="32" height ="32">'
;
}


root@localhost:~# 27.06.2022 12:34

Цитата:

Сообщение от òbi

или так

PHP:


Код:

$items
=
$result
-
>
fetchAll
(
PDO
:
:
FETCH_OBJ
)
;
foreach
(
$items
as
$item
)
{
$title
=
$item
-
>
item_name
;
if
(
$item
-
>
enchant
>
0
)
$title
.
=
' +'
.
$item
-
>
enchant
;
if
(
$item
-
>
amount
>
0
)
$title
.
=
' ('
.
$item
-
>
amount
.
')'
;
echo
'
item_type
.
'.jpg" width="32" height ="32">'
;
}


а почему не while? просто из интереса спрашиваю

òbiòbi верифицированный пользователь. 27.06.2022 12:37

Цитата:

Сообщение от root@localhost:~#

а почему не while? просто из интереса спрашиваю

в данном случае не будет иметь значения, как больше нравится

Desquire 27.06.2022 12:40

Сильно костьільно из-за чистого пхп).

У тебя есть операторьі ?? ?:

зачем тебе делать ансет перед вьіводом?

Можно сделать несколько вариантов. ( один менее костьільний, второй)

Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
echo
'
item_name
.
(
$row
-
>
enchant
>
0
?
' +'
.
$row
-
>
enchant
:
''
)
.
(
$row
-
>
amount
>
0
?
' ('
.
$row
-
>
amount
.
')'
:
''
)
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}

Может нужно будет добавлять какие-то еще лебльі или т.п.

То можно сделать вот так

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
$data_titles
=
[
]
;
$data_titles
[
]
=
$row
-
>
item_name
;
if
(
$row
-
>
enchant
>
0
)
$data_titles
[
]
=
'+'
.
$row
-
>
enchant
;
if
(
$row
-
>
amount
>
0
)
$data_titles
[
]
=
'('
.
$row
-
>
amount
.
')'
;
// Можно добавить еще что-то в $data_titles.
echo
'
item_type
.
'.jpg" width="32" height ="32">'
;
}


root@localhost:~# 27.06.2022 12:41

Цитата:

Сообщение от Desquire

Сильно костбьіли.

У тебя есть операторьі ?? ?:
зачем тебе делать ансет перед вьіводом?

Можно сделать несколько вариантов. ( один менее костьільний, второй)
Єто переделаньій вариант @Mex-Vision, тоже самое, только для пхп 8 и в 1 строку)

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
echo
'
item_name
.
(
$row
-
>
enchant
>
0
?
' +'
.
$row
-
>
enchant
:
''
)
.
(
$row
-
>
amount
>
0
?
' ('
.
$row
-
>
amount
.
')'
:
''
)
.
'">
item_type
.
'.jpg" width="32" height ="32">'
;
}

Может нужно будет добавлять какие-то еще лебльі или т.п.
То можно сделать вот так

PHP:


Код:

while
(
$row
=
$result
-
>
fetch
(
PDO
:
:
FETCH_OBJ
)
)
{
$data_titles
=
[
]
;
$data_titles
[
]
=
$row
-
>
item_name
;
if
(
$row
-
>
enchant
>
0
)
$data_titles
[
]
=
'+'
.
$row
-
>
enchant
;
if
(
$row
-
>
amount
>
0
)
$data_titles
[
]
=
'('
.
$row
-
>
amount
.
')'
;
// Можно добавить еще что-то в $data_titles.
echo
'
item_type
.
'.jpg" width="32" height ="32">'
;
}


я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше

Desquire 27.06.2022 12:42

Цитата:

Сообщение от root@localhost:~#

я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше

У тебя сразу идет вьівод.

Собери все в 1 и вьіведи в нужном месте еще)


Время: 20:57