Смарт взорваться или что-то другое

У меня есть массив:

$array = [
'aaa 3',
'bbb 15',
'ccccc 3A',
'dddd 2412',
'eee fff 15',
'ggg 612',
'hhh iiiii 23B',
];

Я хотел бы получить:

$name = 'aaa'; $number = '3';
$name = 'bbb'; $number = '15';
$name = 'ccccc'; $number = '3A';
$name = 'dddd'; $number = '2412';
$name = 'eee'; $number = '15';
$name = 'ggg'; $number = '612';
$name = 'hhh iiiii'; $number = '23B';

Итак, я делаю:

foreach ($array as $item) {
$expl = explode(' ', $item);
$name = $expl[0];
$number = $expl[1];
}

Но это не работает для eee fff 15 а также hhh iiiii 23Bпотому что эти имена состоят из двух частей. Как лучше для этого?

1

Решение

Используйте регулярное выражение:

<?php

$array = [
'aaa 3',
'bbb 15',
'ccccc 3A',
'dddd 2412',
'eee fff 15',
'ggg 612',
'hhh iiiii 23B',
];

$regex = '#(?<word>.+)\s(?<number>.+)#';
$results = [];

foreach ($array as $line) {
preg_match($regex, $line, $matches);
$results[$matches['word']] = $matches['number'];
}

var_dump($results);

2 группы захвата, сначала любые персонажи .+тогда пробел \sтогда никаких персонажей .+

Выход:

array(7) { ["aaa"]=> string(1) "3" ["bbb"]=> string(2) "15" ["ccccc"]=> string(2) "3A" ["dddd"]=> string(4) "2412" ["eee fff"]=> string(2) "15" ["ggg"]=> string(3) "612" ["hhh iiiii"]=> string(3) "23B" }

Смотрите это работает здесь: https://3v4l.org/t2tMd

2

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

Вам нужно посмотреть на размер массива и выбрать только последний для числа, а остальные для имени …

foreach ($array as $item) {
$expl = explode(' ', $item);
$name = implode(" ", array_slice($expl,0,-1));
$number = $expl[count($expl)-1];

echo $name."=". $number.PHP_EOL;
}
1

Немного опоздал на вечеринку, но я хотел добавить свое предложение о том, как это сделать.
Если $number Вы хотите, чтобы всегда в конце массива, то не имеет значения, насколько большой $name является

$newArray = array();
foreach ($array as $item) {
$expl = explode(' ', $item);
//get the size of the array
$last= count($expl)-1;

//get the final element in the array
$number = $expl[$last];

//remove the last element from array
unset($expl[$last]);

//glue it back together
$name = implode(" ",$expl);

//set the name + number in our array
$newArray[]=array('name' => $name,'number'=>$number);

}print_r($newArray);

//Output:
/* Array (
[0] => Array (
[name] => aaa
[number] => 3
)
[1] => Array (
[name] => bbb
[number] => 15
)
[2] => Array (
[name] => ccccc
[number] => 3A
)
[3] => Array (
[name] => dddd
[number] => 2412
)
[4] => Array (
[name] => eee fff
[number] => 15
)
[5] => Array (
[name] => ggg
[number] => 612
)
[6] => Array (
[name] => hhh iiiii
[number] => 23B
)
)
*/
0

попробуй это,

foreach ($array as $item) {
$expl = explode(' ', $item);
$division=array_pop($expl);
$name = $expl[0].' '.$expl[1];
$number = $division;
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector