У меня есть массив с строковыми элементами разной длины. Мне нужно разбить этот массив на несколько массивов, каждый из которых содержит строки только одной определенной длины.
Пример:
$allstrings = ('hello', 'world', 'stackoverflow');
Я нуждаюсь:
$length4 = ('hello', 'world');
$length12 = ('stackoverflow');
Спасибо большое за вашу помощь!
Помимо того, что «hello» и «world» равны 5, а «stackoverflow» равен 13, вы можете использовать foreach и использовать strlen($str)
$allstrings = array('hello', 'world', 'stackoverflow');
Я бы предложил использовать многомерный массив:
$array = array();
foreach($allstrings as $str) {
$array[strlen($str)][] = $str;
}
В этом конкретный Например, вы хотите создать массивы, содержащие строки, которые соответствуют определенной длине, и назначить эти массивы переменным в соответствии со следующим соглашением об именах: $lengthN
где N — длина строки минус один.
Вот как вы можете использовать это, используя переменные переменные:
foreach($allstrings as $string) {
// Remove one as per your spec
$len = strlen($string) - 1;
// Set temp var name
$var_name = 'length' . $len;
// Initialize variable variable
if(!isset(${$var_name}))
${$var_name} = array();
// Add variable variable's new array entry
${$var_name}[] = $string;
}
print_r($length4);
print_r($length12);
Array
(
[0] => hello
[1] => world
)
Array
(
[0] => stackoverflow
)
Несмотря на то, что это приводит к требуемому результату, вы должны учитывать тот факт, что создание произвольных имен переменных не является хорошей идеей. Содержать их в массивах — это структурированное решение, которое дает вам границы для доступа к ним, не зная, что они представляют. В этом случае вы необходимость знать, чтобы использовать $length4
или же $length12
, Пища для размышлений.