【问题标题】:Convert output of "explode" from strings to arrays将“explode”的输出从字符串转换为数组
【发布时间】:2018-06-03 08:57:05
【问题描述】:

如何将“explode”的字符串输出转换成数组?

给定这个字符串:

$long_string = '("name" => "Able","company" => "Tesla","haircolor" => 
"brown","name" => "Aaaa","home" => "Kansas","shoe" => 12,)<>( "name" => 
"Bob","company" => "Target","haircolor" => "red","name" => "Bbbb","home" => 
"Ohio","shoe" => 11.5)' ;

Explode 将生成一个包含 2 个字符串的数组。

$multi_strings =  explode("<>",$long_string); 

$multi_strings 是一个包含 2 个字符串的数组:

array(2) {
  [0]=> string(112) "("name" => "Able","company" => "Tesla","haircolor" => 
  "brown","name" => "Aaaa","home" => "Kansas","shoe" => 12,)"

  [1]=> string(110) "( "name" => "Bob","company" => "Target","haircolor" => 
 "red","name" => "Bbbb","home" => "Ohio","shoe" => 11.5)"
}

要将这两个字符串转换为父数组中的嵌套数组,似乎应该有一个 php 函数,但我似乎找不到它。
我需要创建自己的函数来完成此任务吗?

【问题讨论】:

  • 你从哪里得到这个字符串的?
  • 这是一个例子:实际数据来自数据供应商,本应是 .csv 文件,但实际上是一串垃圾。花了 38 步才变成这样。
  • 解析 csv 文件已经为您提供了一个数组。
  • 如果这需要你 38 步,那么我必须看到实际输入
  • Valdeir - 不会将数组转换为字符串吗?我已经有字符串了。

标签: php multidimensional-array explode


【解决方案1】:

在第二个参数为 true 的字符串上使用 json_decode,你会得到一个关联数组作为输出。

$url = "https://api.iextrading.com/1.0/stock/market/batch?symbols=aapl,tsla,ge&types=quote,earnings,stats";
$arr = json_decode(file_get_contents($url), true);
Var_dump($arr);

看这里;
我从页面复制了字符串并将其发布为 $str。
https://3v4l.org/duWrI
只需两个步骤。

【讨论】:

  • 是的,就是这样
  • 这太棒了。谢谢!完美运行。
【解决方案2】:

您的长字符串似乎是一种非常糟糕的数组存储自定义格式。使用json_encodeserialize 来有效地存储数组(以及更多)会更有效。

现在,如果您对此感到困惑,可以在不使用 eval 的情况下执行此操作:

$long_string = '("name" => "Able","company" => "Tesla","haircolor" => 
"brown","name" => "Aaaa","home" => "Kansas","shoe" => 12,)<>( "name" => 
"Bob","company" => "Target","haircolor" => "red","name" => "Bbbb","home" => 
"Ohio","shoe" => 11.5)';
$parts = explode('<>', $long_string);
eval('$result = array(array' . $parts[0] . ', array' . $parts[1] . ');');
print_r($result);

不用说这是丑陋和非常不安全的,因为如果看起来像 php 代码,可以执行 $long_string。

另一种更安全的方法是手动解析字符串并从中构建一个数组。但它需要更多不那么简单的代码。再说一次,如果你可以使用其他格式,那就去做吧。

【讨论】:

  • $parts[0]...$parts[0]?不是$parts[0]...$parts[1]
  • fab2s - 谢谢。这样可行。告诉我 $long_string 有什么不妥之处。它的结构与 php 手册中示例 #3 中的代码完全相同。 php.net/manual/en/language.types.array.php
【解决方案3】:

这完成了我所需要的: 从这里:http://php.net/manual/en/function.explode.php 示例:这是一个用于“multi”分解字符串的函数。

<?php

$long_string = '"name" => "Able","company" => "Tesla","haircolor" => "brown","name" => "Aaaa","home" => "Kansas","shoe" => 12<>"name" => "Bob","company" => "Target","haircolor" => "red","name" => "Bbbb","home" =>"Ohio","shoe" => 11.5';

function multiexplode ($delimiters,$string) {
    $ary = explode($delimiters[0],$string);
    array_shift($delimiters);
    if($delimiters != NULL) {
        foreach($ary as $key => $val) {
             $ary[$key] = multiexplode($delimiters, $val);
        }
    }
    return  $ary;
}

// Example of use
// $string = "1-2-3|4-5|6:7-8-9-0|1,2:3-4|5";
// $delimiters = Array(",",":","|","-");

$delimiters = Array("<>",",");

$res = multiexplode($delimiters,$long_string);
echo '<pre>';
print_r($res);
echo '</pre>';
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多