使用纯文本变量创建数组


Create Array out of a plain text variable?

我正试图从php:中的纯文本变量创建一个数组

$arraycontent = "'foo', 'bar', 'hallo', 'world'";
print_r( array($arraycontent) );

但它将整个字符串输出为[0]

Array ( [0] => 'foo', 'bar', 'hallo', 'world' ) 

我希望"foo"为[0]条为[1]等等。有指针吗?这可能吗?

YIKES,为什么这些都这么长?

这里有一条线:

explode("', '", trim($arraycontent, "'"));

如果您的字符串是这样的:

$arraycontent = "foo, bar, hallo, world"

只有逗号分隔,然后可以使用爆炸,如下所示:

$myArray = explode(", ", $arraycontent);

这将根据您定义的分隔符创建一个字符串数组,在本例中为","。

如果你想保持字符串原样,你可以使用这个:

$myArray = explode("', '", trim($arraycontent, "'"));

现在将使用","作为分隔符,trim()函数将从字符串的开头和结尾删除"。

如果这是PHP,您可以使用:

$foo = "'foo', 'bar', 'hallo', 'world'";
function arrayFromString($string){
  $sA = str_split($string); array_shift($sA); array_pop($sA);
  return explode("', '", implode('', $sA));
}
print_r(arrayFromString($foo));
eval('$array = array('.$arraycontent.');');

这将是最短的路。


$array = explode(',', $arraycontent);
$mytrim = function($string) { return trim($string, " '"); };
$array = array_map($mytrim, $array);

一个更安全,因此更好的。如果有不同的空白字符,则必须编辑$mytrim lambda函数。

这里有一个基于输入示例的变体可以工作,但可能存在未按需要处理的角落情况。

$arraycontent = "'foo', 'bar', 'hallo', 'world'";
$arrayparts = explode(',', $arraycontent); // split to "'foo'", " 'bar'", " 'hallo'", " 'world'"
for each ($arrayparts as $k => $v) $arrayparts[$k] = trim($v, " '"); // remove single qoute and spaces in beggning and end.
print_r( $arrayparts ); // Array ( [0] => 'foo', [1] => 'bar', [2] => 'hallo', [3] => 'world' )

这应该给出你想要的,但也要注意,例如

$arraycontent = "  '   foo   '   ,    '   bar  ' ' ' '  ', 'hallo', 'world'";

会给出相同的输出,所以问题变成了$arraycontent输入有多严格?

如果必须有这样的输入,我建议修剪它并使用preg_split()。

$arraycontent = "'foo', 'bar', 'hallo', 'world'";
$trimmed = trim($arraycontent, " 't'n'r'0'x0B''""); // Trim whitespaces and " and '
$result = preg_split("#[''"]'s*,'s*[''"]#", $trimmed); // Split that string with regex!
print_r($result); // Yeah, baby!

编辑:我还可以补充一点,我的解决方案比其他解决方案更快(更通用)。

这种普遍性在于:

  • 它可以将"answers"识别为正确的引号和
  • 它忽略了引用文本前面、里面和后面的多余空格;不是在里面

创建数组时似乎遇到问题。。尝试使用

<?php
$arraycontent = array('foo', 'bar', 'hallo', 'world');
print_r( array($arraycontent) );
?>

其输出将是:

数组([0]=>数组([0]=>foo[1]=>bar[2]=>hallo[3]=>世界))