【问题标题】:How to convert String Array to php Array?如何将字符串数组转换为 php 数组?
【发布时间】:2021-08-26 01:12:07
【问题描述】:

如何将 Sting 数组转换为 PHP 数组?

"['a'=>'value one','key2'=>'value two']"

$data=['a'=>'value one','key2'=>'value two'];

如果有人知道任何解决方案,请告诉我


我想通过 textarea 获取数组输入。我想将其转换为 PHP 数组。

当我通过 textarea 时

['a'=>'value one','key2'=>'value two']

这是在提交 from 后发生的

"['a'=>'value one','key2'=>'value two']"

现在我如何从这个转换为 PHP 数组?

【问题讨论】:

  • 你到底在做什么?你是如何得到这个字符串的?可能是我们可以建议您更好的方法。
  • 同意@JohnDoe 让我们知道您从哪里获得该字符串。你会得到更好的帮助
  • 我想通过 textarea 进行数组输入。我想将其转换为 PHP 数组。当我通过 textarea ['a'=>'value one','key2'=>'value two'] 提交表单 "['a'=>'value one','key2'=>'value two']" 后发生这种情况现在我如何从这个转换为 PHP Array?
  • 你可以把上面的数组字符串改成Javascript JSON,然后用PHP解码。
  • @IQBALHASAN 请展示你到目前为止所做的尝试?

标签: php arrays laravel laravel-livewire


【解决方案1】:

假设您不允许多维数组,这将起作用:

$stringArray = "['a'=>'value one','key2'=>'value two']";
$array = array();

$trimmedStringArray = trim( $stringArray, '[]' );
$splitStringArray = explode( ',', $trimmedStringArray );
foreach( $splitStringArray as $nameValuePair ){
    list( $key, $value ) = explode( '=>', $nameValuePair );
    $array[$key] = $value;
}

输出:

Array
(
    ['a'] => 'value one'
    ['key2'] => 'value two'
)

在处理输入之前,您可能需要进行一些错误检查以确保输入格式正确。

【讨论】:

  • 它正在工作。但是如果语法错误,PHP 错误就来了。如何检查语法是否正确? ——
  • 您看到了什么错误?我在这里测试过:3v4l.org/KDisl
  • 我明白了,这取决于您希望接受输入的格式。如果您想严格执行上述格式,您可以使用如下正则表达式匹配:if( !preg_match( "/^\[?('[^']+'=>'[^']+',?)+\]?$/", $stringArray ) print 'invalid input';
【解决方案2】:

使用 eval() 的极其不安全的版本:

<?php

$a = "['a'=>'value one','key2'=>'value two']";

eval('$b = '.$a.';');

print('<pre>');
print_r($b);

仅在您确定其他人无法使用您的 textarea 输入时使用!

使用替换将其转换为 json 是公共表单的更好选择。此外,如果你在工作中使用它,你可能会被解雇:)

带有语法错误捕获:

<?php

$a = "['a'=>'value one','key2'=>'value two'dsbfbtrg]";

try {
    eval('$b = '.$a.';');
} catch (ParseError $e) {
    print('Bad syntax');
    die();
    // or do something about the error
}

print('<pre>');
print_r($b);

【讨论】:

  • 它工作正常。但是如果语法错误,PHP 错误就来了。如何检查语法是否正确?
【解决方案3】:

另一种选择:

<?php
$string = "['a'=>'value one','key2'=>'value two']";
$find = ["'", "=>", "[", "]"];
$replace = ["\"", ":", "{", "}"];
$string = str_replace($find, $replace, $string);
$array = json_decode($string, true);
var_dump($array);
?>

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2018-01-29
    相关资源
    最近更新 更多