Как мне разбить эти массивы? - PullRequest
2 голосов
/ 29 января 2011
$data = "google,98%,bing,92%,searchengine,56%,seo,85%,search,94%";

Я хочу разделить это и получить окончательный результат

google = 98%
bing = 92%
searchengine = 56%
seo = 85%
search = 94%

Ответы [ 4 ]

4 голосов
/ 29 января 2011

Это даст вам ассоциативный массив:

$out = array();
$parts = explode(',', $data);
for($i=0;$i<count($parts);$i++) {
   $out[$parts[$i]] = $parts[++$i];
}
3 голосов
/ 29 января 2011

Если вы хотите, чтобы ваш вывод представлял собой одну строку, содержащую новые строки, вы можете использовать preg_replace:

$result = preg_replace('/([^,]*),([^,]*),?/', "$1 = $2\n", $data);

Вывод:

google = 98%
bing = 92%
searchengine = 56%
seo = 85%
search = 94%

Посмотретьработая онлайн на ideone .

1 голос
/ 29 января 2011

Попробуйте это:

$data = "google,98%,bing,92%,searchengine,56%,seo,85%,search,94%";

preg_match_all("/(\w+),(\d+)%/", $data, $data_array, PREG_SET_ORDER);

foreach($data_array as $item) {
    print $item[1]." = ".$item[2]."%<br />";
}

Разбор всего происходит в одну строку;единственное зацикливание на выходе.Вы можете сделать print_r($data_array), чтобы увидеть, как устроен массив в случае, если вы хотите делать с данными разные вещи.

Кроме того, если вы хотите, чтобы знак процента был включен в данные, вы можете переместить его ввнутри второй пары скобок.Но если вы не включите его (и просто отобразите его при выводе), будет легче выполнять вычисления на данных, если вам нужно

0 голосов
/ 29 января 2011

Как насчет ...

$data = "google,98%,bing,92%,searchengine,56%,seo,85%,search,94%";
$dataSet = array_combine(array_map(create_function('$entry', 'return $entry[0];'),
                                   array_chunk(explode(",", $data), 2)),
                         array_map(create_function('$entry', 'return $entry[1];'),
                                   array_chunk(explode(",", $data), 2)));

foreach ($dataSet as $cType => $cPercentage) {
    echo $cType . " = " . $cPercentage;
}
...