2013-08-26 4 views
0

Я пытаюсь создать массив из простых текстовых переменных, как это в PHP:Создать массив из простой текстовой переменной?

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

Но она выводит всю строку как [0]

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

Я хотел бы «Foo» в be [0] бар будет [1] и так далее. Любые указатели? Возможно ли это?

+0

Какой язык программирования у него? – LemonMooseTom

+1

Вы не указали, какой язык вы используете. – Jsdodgers

+0

Вы всегда должны указывать язык программирования как тег, чтобы люди, у которых есть этот язык в качестве избранного, видят ваш вопрос. Просто подсказка, вероятно, даст вам больше ответов! – Jiddle

ответ

0
eval('$array = array('.$arraycontent.');'); 

Был бы самым коротким пути.


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

Безопаснее и, следовательно, лучше один. Если у вас разные символы пробелов, вам нужно будет отредактировать лямбда-функцию $mytrim.

+0

Если вы знаете или более безопасный метод, поделитесь. 'eval' является последним курортом .. Даже тогда вы просите о неприятностях –

+0

Вы правы. Я добавил также более безопасный пример. – Langdi

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! 

EDIT: Также я могу добавить, что мое решение значительно быстрее (и более универсально), чем другие.

Эта универсальность заключается в:.

  • Он может распознавать как "и" как правильные цитаты и
  • Он игнорирует лишние пробелы перед, во время и после цитируемого текста, а не внутри него
1

Если строка была так:

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

с только запятые separat ING, то вы могли бы использовать взорваться, как это:

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

Это создаст массив строк, основанных на сепараторе вы определяете, в данном случае «».

Если вы хотите сохранить строку как есть, вы можете использовать это:

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

Это теперь будет использовать «», «» в качестве разделителя, а функция обрезки() удаляет»из начало и конец строки.

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)); 
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 вход?

1

YIKES, почему все это так долго?

Вот один вкладыш:

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

Кажется, у вас возникли проблемы при создании массива .. попробовать использовать

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

его выход будет:

Array ([0] => Массив ([0] => foo [1] => bar [2] => hallo [3] => мир ))

Смежные вопросы