Большая строка в хороший массив - PullRequest
0 голосов
/ 15 декабря 2011

Мне нужно превратить большую строку в хороший массив. Сама строка - это список тегов и идентификаторов тегов. Их может быть любое количество. Вот пример строки: 29:funny,30:humor,2:lol - id: tag_name. Теперь у меня проблема с преобразованием его в массив - Array ( [29] => funny [30] => humor ). Я могу добраться до части, где теги так же

Массив (

[0] = Массив (

[0] = 29

[1] = смешно

)

[1] = Массив (

[0] = 30

[1] = юмор

)

)

Я тоже смотрю на функции массива, но, похоже, ни одна из них не может мне помочь. Кто-нибудь может мне помочь?

Ответы [ 5 ]

0 голосов
/ 15 декабря 2011
<?php

$test = '29:funny,30:humor,2:lol';

$tmp_array = explode(',', $test);

$tag_array = ARRAY();

foreach ($tmp_array AS $value) {
    $pair = explode(':', $value);
    $tag_array[$pair[0]] = $pair[1];
}

var_dump($tag_array);

?>
0 голосов
/ 15 декабря 2011

Вы можете использовать preg_match_all

<code>preg_match_all('#([\d]+):([a-zA-Z0-9]+)#', $sString, $aMatches);

// Combine the keys with the values.
$aArray = array_combine($aMatches[1], $aMatches[2]);

echo "<pre>";
print_r($aArray);
echo "
";

Выходы:

Array
(
    [29] => funny
    [30] => humor
    [2] => lol
)
0 голосов
/ 15 декабря 2011

Вы можете использовать explode () для этого, хотя это займет два прохода.Первый разделить строку на пары (взорваться (',', $ string)), а второй разделить каждое сопоставление

$arr = explode (',', $string);
foreach ($arr as &$pairing)
{
    $pairing = explode (':', $pairing);
}
0 голосов
/ 15 декабря 2011
$string = '29:funny,30:humor,2:lol';
$arr1   = explode(',', $string);
$result = array();
foreach ($arr1 as $element1) {
    $result[]  = explode(':', $element1);
}
print_r($result);
0 голосов
/ 15 декабря 2011

Вот код, который поможет вам:

$str = "29:funny,30:humor,2:lol";
$arr = array();
foreach (explode(',', $str) as $v) {
    list($key, $val) = explode(':', $v);
    $arr[$key] = $val;
}
print_r($arr);
/* will output:
Array
(
    [29] => funny
    [30] => humor
    [2] => lol
)
*/

Например, вы можете заменить foreach на array_map, но я думаю, что так вам проще.

Вот пример того, как это работает: http://codepad.org/4BpnCiEJ

...