Как разделить массив по длине элементов в Stack Overflow

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

Пример:

$allstrings = ('hello', 'world', 'stackoverflow');

Я нуждаюсь:

$length4 = ('hello', 'world');
$length12 = ('stackoverflow');

Спасибо большое за вашу помощь!

0

Решение

Помимо того, что «hello» и «world» равны 5, а «stackoverflow» равен 13, вы можете использовать foreach и использовать strlen($str)

$allstrings = array('hello', 'world', 'stackoverflow');

Я бы предложил использовать многомерный массив:

$array = array();
foreach($allstrings as $str) {
$array[strlen($str)][] = $str;
}
2

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

В этом конкретный Например, вы хотите создать массивы, содержащие строки, которые соответствуют определенной длине, и назначить эти массивы переменным в соответствии со следующим соглашением об именах: $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, Пища для размышлений.

1

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