0

我正在尝试从一个纯文本变量创建一个数组,就像在 php 中一样:

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

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

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

我希望 'foo' 是 [0] 酒吧是 [1] 等等。任何指针?这甚至可能吗?

4

7 回答 7

1

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

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

只有逗号分隔,然后你可以使用explode,像这样:

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

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

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

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

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

于 2013-08-26T23:58:19.943 回答
1

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

这是一个衬里:

explode("', '", trim($arraycontent, "'"));
于 2013-08-27T00:20:14.397 回答
0

似乎您在创建数组时遇到问题..尝试使用

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

它的输出将是:

数组 ( [0] => 数组 ( [0] => foo [1] => bar [2] => 你好 [3] => world ) )

于 2013-08-27T00:33:57.680 回答
0
eval('$array = array('.$arraycontent.');');

将是最短的方式。


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

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

于 2013-08-26T23:51:59.560 回答
0

如果你必须有这样的输入,我建议修剪它并使用 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!

编辑:另外我可能会补充一点,我的解决方案比其他解决方案要快得多(并且更通用)。

这种普遍性在于:

  • 它可以将 " 和 ' 识别为正确的引号,并且
  • 它忽略引用文本之前、之中和之后的额外空格;不在里面。
于 2013-08-26T23:52:24.290 回答
0

如果这是 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));
于 2013-08-27T00:02:56.927 回答
0

这是基于输入示例的变体,但可能存在未按需要处理的极端情况。

$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

于 2013-08-27T00:06:02.413 回答