【问题标题】:PHP convert multiple strings with special chars as delimiters to arrayPHP将带有特殊字符的多个字符串作为分隔符转换为数组
【发布时间】:2022-12-31 00:11:58
【问题描述】:

我有一个来自 wordpress 数据库的多个字符串。 它是一个来自插件的表格,它以一种非常奇怪的方式存储数据,如下所示:

    print_r($results);
    
Array 
(
    [form] => text^name14^Antony~text^secondname14^White~email^email14^antony.white@gmail.com
)
Array  
(
    [form] => ......
)

我需要得到干净的数据,所以:

foreach ($results as $result) {

    $formdata_array = explode('~',$result);
    $formdata_array_count = count($formdata_array);
    for ( $i=0 ; $i < $formdata_array_count ; $i++) {
       if ( empty( $formdata_array[$i] ) ) {
          continue;
       }
       $elemnts = explode('^',$formdata_array[$i]);

       $type = $elemnts[0];
       $element_name = $elemnts[1];
       $value = $elemnts[2];
       $value = nl2br($value);
}

在这一点上我得到:

print_r($value)

    Antony 
    White
    antony.white@gmail.com

但我需要有一个数组来处理

Array
    (
        [0] => Antony
        [1] => White
        [2] => antony.white@gmail.com
    )

我尝试了不同的方法,如 array_merge、array_column、array_combine,但我无法获得最终结果

【问题讨论】:

  • 请向我们展示您的代码,添加minimal reproducible example
  • 我的猜测是您为这三个项目调用了三次print_r(array($output));。我们需要查看执行此操作的代码来帮助您。
  • explode()ing是否正确输入了$output来制作数组?
  • 更新了我的问题

标签: php arrays string


【解决方案1】:

这可能是您正在寻找的:

<?php

$results = [
   "text^name14^Antony~text^secondname14^White~email^email14^antony.white@gmail.com",
   "text^name14^Georgy~text^secondname14^Black~email^email14^georgy.black@gmail.com",
];

foreach ($results as $result) {
    $output = [];
    $formdata_array = explode('~',$result);
    $formdata_array_count = count($formdata_array);
    for ( $i=0 ; $i < $formdata_array_count ; $i++) {
       if ( empty( $formdata_array[$i] ) ) {
          continue;
       }
       $elements = explode('^',$formdata_array[$i]);

       $output[] = [
        'type' => $elements[0],
        'name' => $elements[1],
        'value' => $elements[2],
       ];
    }
   print_r(array_column($output, 'value'));
}

输出是:

Array
(
    [0] => Antony
    [1] => White
    [2] => antony.white@gmail.com
)
Array
(
    [0] => Georgy
    [1] => Black
    [2] => georgy.black@gmail.com
)

【讨论】:

  • 它有效,但有一个奇怪的行为:1st 数组没问题,第二个是 1st + 2nd,第三个是 1st + 2nd +3rd 等等。您可以尝试使用多行
猜你喜欢
  • 2016-06-09
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2020-01-10
  • 2013-03-08
  • 2019-08-23
  • 2011-08-31
相关资源
最近更新 更多