将平面数组中的所有分隔字符串分解为单个子字符串的平面数组

问题描述 投票:0回答:7

我有一个循环,其中包含一串逗号分隔的值。

foreach ($profiles as $profile) {
    $user_states[] = exlpode(', ', '[string of comma seperated states]');
}

我遇到的问题是

$user_states
数组最终成为两个级别,循环的每次迭代都会创建一个嵌套数组。

array (size=2)
  0 => 
    array (size=3)
      0 => string 'DC' (length=2)
      1 => string 'Maryland' (length=8)
      2 => string 'Northern-Virginia' (length=17)
  1 => 
    array (size=1)
      0 => string 'North-Carolina,Virginia' (length=23)

如何获取分解值并将它们全部放入一个数组中?

php arrays explode flatten delimited
7个回答
2
投票

[]=
运算符表示添加到数组。
explode
方法,返回一个数组,所以你要做的就是将一个数组添加到数组中。

由于

profiles
可能包含 2 个元素,因此您将获得一个大小为 2 的分解字符串数组

您可能正在寻找的是

array_merge

用这个替换循环的内部部分:

$exploded    = exlpode(', ', '[string of comma seperated states]');
$user_states = array_merge($user_states, $exploded)

1
投票

您需要的是:

$user_states = array();
foreach ($profiles as $profile) {
  $user_states = array_merge($user_states, exlpode(', ', '[string of comma seperated states]'));
}

问候, 瓦伦丁


1
投票

使用合并功能:

$states=array();

foreach ($profiles as $profile) {
    $user_states = exlpode(', ', '[string of comma seperated states]');
    array_merge($states,$user_states);
}

var_dump($states);

1
投票

你可以试试

$user_states = array();
...
$user_states += explode(', ', '[string of comma seperated states]');
...

这将继续将“explode”数组添加到主 $user_states 数组中。


1
投票

因为我不知道你的

$profiles
有什么,所以我给你一个简单的例子。

$user_states = array();
$profiles = array('UK, FR, CA, AU', 'UK, FR, CA, AU', 'NW');

foreach ($profiles as $profile)
{
    $extract = explode(', ', $profile);
    $user_states = array_merge($user_states, $extract);
}

// if you want to remove duplications
$user_states = array_unique($user_states);

echo '<pre>';
print_r($user_states);

会给你:

Array
(
    [0] => UK
    [1] => FR
    [2] => CA
    [3] => AU
    [8] => NW
)

并且

如果你不使用

array_unique()

Array
(
    [0] => UK
    [1] => FR
    [2] => CA
    [3] => AU
    [4] => UK
    [5] => FR
    [6] => CA
    [7] => AU
    [8] => NW
)

1
投票

你尝试过这个吗

$user_states = exlpode(', ', '[string of comma seperated states]');

编辑:

如果我没记错的话,这段代码对你有帮助

$profiles = array( "yale, ny, la", "boston, vegas");

$user_states = array();

foreach ($profiles as $profile) {

    $tmp = explode(', ', $profile);
  $user_states = array_merge( $tmp, $user_states);
}


var_dump($user_states);

0
投票

费心进行迭代爆炸和合并调用是间接的。

只需使用与分解每个字符串相同的分隔符来分解整个一维数组,然后分解该单个字符串。

代码:(演示

$array = [
    'DC, Maryland, Northern-Virginia',
    'North-Carolina, Virginia',
];

var_export(explode(', ', implode(', ', $array)));
/*
array (
  0 => 'DC',
  1 => 'Maryland',
  2 => 'Northern-Virginia',
  3 => 'North-Carolina',
  4 => 'Virginia',
)
*/

如果你绝对需要使用循环(可能是因为你每次迭代都在执行其他操作,那么就不要费心合并;使用

array_push()
来做它唯一有用的事情——一次将多个元素推入数组中。使用扩展运算符允许
array_push()
将生成的元素单独推送到结果数组中。

代码:(演示

$result = [];
foreach ($array as $string) {
    array_push($result, ...explode(', ', $string));
}
var_export($result);
// same result as previous snippet
© www.soinside.com 2019 - 2024. All rights reserved.