【问题标题】:PHP Exploding string into arrayPHP将字符串分解为数组
【发布时间】:2014-10-26 17:20:18
【问题描述】:

我有一个包含逗号分隔值字符串的循环。

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)

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

【问题讨论】:

  • 你的问题是explode()返回一个数组。如果您将数组作为新元素分配到目标数组$user_states 中,您显然会得到一个数组数组。
  • 在循环之前初始化一个主数组并将你的爆炸合并到那个(array_merge)

标签: php arrays explode


【解决方案1】:

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

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

您可能正在寻找的是array_merge

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

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

【讨论】:

  • 这很有意义,也是我怀疑的,我只是不确定如何将分解字符串的结果合并到一个数组中。
  • @Niko 100% 正确,我只是更喜欢在 stackoverflow 上回答时使用自我描述的方法名称
【解决方案2】:

你需要的是:

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

问候, 瓦伦丁

【讨论】:

  • 感谢您的回答。虽然它是正确的,但我要感谢 Dima 对情况的清晰解释。
【解决方案3】:

使用合并功能:

$states=array();

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

var_dump($states);

【讨论】:

    【解决方案4】:

    你可以试试

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

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

    【讨论】:

      【解决方案5】:

      由于我不知道你在$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
      )
      

      【讨论】:

        【解决方案6】:

        你试过了吗

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

        【讨论】:

        • 这将用 foreach() 循环的每次迭代替换数组中的元素
        猜你喜欢
        • 1970-01-01
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 2018-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多