 |
|

27.06.2022, 11:38
|
|
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами:
5175542
Репутация:
548
|
|
недавно начал учить 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">'
;
}
|
|
|

27.06.2022, 12:17
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Сообщение от 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">'
;
}
Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.
|
|
|

27.06.2022, 12:19
|
|
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами:
5175542
Репутация:
548
|
|
Сообщение от 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">'
;
}
Да и как мне кажется, код более оптимизирован. Меньше временных переменных, меньше канкатинаций.
хм, тоже неплохо, не додумался почему то
|
|
|

27.06.2022, 12:22
|
|
Постоянный
Регистрация: 01.03.2016
Сообщений: 828
С нами:
5368054
Репутация:
448
|
|
Сообщение от root@localhost:~#
хм, тоже неплохо, не додумался почему то
Я просто уже не помню до конца, но если включить варнинги в php, скорее всего будет ругаться на обращение к перменной которая не установлена. А вы как раз обращаетесь к переменным которые удалили функцией unset
Попробуйте включить ошибки:
ini_set('display_errors', 1);
error_reporting(E_ALL);
и отработать свой код, будут ли варнинги.
|
|
|

27.06.2022, 12:29
|
|
Новичок
Регистрация: 09.03.2017
Сообщений: 0
С нами:
4831039
Репутация:
1976
|
|
или так
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">'
;
}
|
|
|

27.06.2022, 12:34
|
|
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами:
5175542
Репутация:
548
|
|
Сообщение от ò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? просто из интереса спрашиваю
|
|
|

27.06.2022, 12:37
|
|
Новичок
Регистрация: 09.03.2017
Сообщений: 0
С нами:
4831039
Репутация:
1976
|
|
Сообщение от root@localhost:~#
а почему не while? просто из интереса спрашиваю
в данном случае не будет иметь значения, как больше нравится
|
|
|

27.06.2022, 12:40
|
|
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами:
5799746
Репутация:
1388
|
|
Сильно костьільно из-за чистого пхп).
У тебя есть операторьі ?? ?:
зачем тебе делать ансет перед вьіводом?
Можно сделать несколько вариантов. ( один менее костьільний, второй)
Єто переделаньій вариант @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">'
;
}
|
|
|

27.06.2022, 12:41
|
|
Познавший АНТИЧАТ
Регистрация: 13.07.2016
Сообщений: 1,418
С нами:
5175542
Репутация:
548
|
|
Сообщение от 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">'
;
}
я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше
|
|
|

27.06.2022, 12:42
|
|
Познавший АНТИЧАТ
Регистрация: 07.05.2015
Сообщений: 1,791
С нами:
5799746
Репутация:
1388
|
|
Сообщение от root@localhost:~#
я еще не пришел к тому, что бы делать по уму, я еще даже не весь базовый синтаксис выучил) поэтому и спросил как лучше
У тебя сразу идет вьівод.
Собери все в 1 и вьіведи в нужном месте еще)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|