我正试图从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]=>世界))