Я пытаюсь использовать sizeof
или же count
чтобы вернуть количество вещей в массиве, однако всякий раз, когда я использую $rank_ids2
считать, а не входить 1, 2, 3, 4, 67, 7
вручную, он просто возвращает 1
, но когда я набираю их непосредственно в массиве, он считается 6 просто отлично!
$ranksAllowed = '|1|2|3|4|67|7|';
$rank_ids = explode('|', trim("|".$ranksAllowed."|", '|'));
$rank_ids2 = implode(", ", $rank_ids);
$arrayofallowed = array($rank_ids2);
echo sizeof($arrayofallowed);
$rank_ids
просто превращает формат | 1 | 2 | .. в 1, 2
Моим первым решением вашей проблемы было бы изначально определить $ranksAllowed
в виде массива вместо строки, разделенной символом трубы:
$ranksAllowed = array(1, 2, 3, 4, 67, 7);
Это имело бы больше смысла почти в любой предсказуемой ситуации. Если по какой-то причине вы бы предпочли сохранить $ranksAllowed
как строка …
$rank_ids = explode('|', trim("|".$ranksAllowed."|", '|'));
можно упростить до:
$rank_ids = explode('|', trim($ranksAllowed, '|'));
Прямо сейчас похоже, что вы пытаетесь сделать 2 вещи одновременно (и не достигаете ни одного)
Возможно, вы захотите превратить вашу строку с разделителями («| 1 | 2 | 3 | …») в строку с разделителями-запятыми (например, «1, 2, 3, …»). В этом случае вы можете просто заменить строку:
$commaDelimited = str_replace('|', ',', trim($ranksAllowed, '|'));
Другая возможность (и я считаю, что вы ищете) состоит в том, чтобы создать массив всех допустимых рангов, которые вы уже достигли на предыдущем этапе, но назначены $rank_ids
вместо $arrayofallowed
:
$arrayofallowed = explode('|', trim($ranksAllowed, '|'));
//Should print out data in array-format, like you want
print_r($arrayofallowed);
//Echo the length of the array, should be 6
echo count($arrayofallowed);
implode
преобразует массив в строку, поэтому после всего вы получите это:
$ranksAllowed
который содержит |1|2|3|4|67|7|
$rank_ids
который содержит несколько элементов, являющихся их 1
, 2
, так далее…$rank_ids2
который содержит 1,2,3,4,67,7
$arrayofallowed
только 1 элемент, будучи строкой внутри $rank_ids2
Для достижения строки, содержащей 1,2,3,4,67,7
от |1|2|3|4|67|7|
Вы можете просто обрезать |
персонаж, как вы делаете, и заменить |
с ,
, Менее дорогой процессор.
$rank_ids2 = str_replace("|", ",", trim("|".$ranksAllowed."|", '|'));
Если вы хотите посчитать их, вы можете explode
это и подсчитать элементы:
$rank_ids2_array = explode(',', $rank_ids2);
echo sizeof($rank_ids2_array);
или с вашим кодом вы можете просто сосчитать уже взорвался $rank_ids
,
echo sizeof($rank_ids);
Попробуйте что-то вроде следующего:
$ranksAllowed = '|1|2|3|4|5|67|7|';
$rank_ids = explode('|', trim($ranksAllowed, '|'));
echo count($rank_ids);
Чтобы объяснить вышесказанное, $ arrayofallowed разворачивает массив $ rank_ids, создавая строку. Это не даст вам ожидаемых результатов при подсчете. Если вы просто посчитаете $ rank_ids (поскольку explode () оставит вас с массивом), вы должны увидеть желаемый результат из 7 элементов.
$ Rank_ids — это ваш массив, а $ arrayofallowed — это строка.
Пожалуйста, смотрите разделы руководства по PHP, относящиеся к функциям implode () и explode () для получения дополнительной информации.