подсчет взорвавшегося массива

Я пытаюсь использовать 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

0

Решение

Моим первым решением вашей проблемы было бы изначально определить $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);
0

Другие решения

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);
0

Попробуйте что-то вроде следующего:

$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 () для получения дополнительной информации.

0
По вопросам рекламы [email protected]