2009-04-18 3 views
2

У меня есть multidimensinal массив .. Что-то вроде этого, например:PHP: Получить текст через запятую

Array (
    [0] => Array 
     (
      [title] => Star Trek - Viaje a las estrellas 
      [country] => Venezuela, Spain, long title, poster title 
     ) 

    [1] => Array 
     (
      [title] => Viaje a Las Estrellas 
      [country] => Venezuela 
     ) 
) 

Я хочу, чтобы получить тэ текст между запятыми из [страны] и вставьте каждый элемент в отдельные индексы, например:

Array (
    [0] => Array 
     (
      [title] => Star Trek - Viaje a las estrellas 
      [country] => [0] => Venezuela 
         [1] => Spain 
         [2] => long title 
         [3] => poster title 
     ) 

    [1] => Array 
     (
      [title] => Viaje a Las Estrellas 
      [country] => Venezuela 
     ) 
) 

Возможно, структура массива неверна, но я просто хочу объяснить вам, что мне нужно делать. Обратите внимание, что не всегда [страна] содержит элементы, разделенные запятыми, иногда это всего лишь один элемент.

Как это сделать?

Спасибо!

ответ

4

Попробуйте использовать explode() на элемент страны. Вы можете использовать разделитель ", ", так как это значения, разделенные запятыми.

Один из способов сделать это (что аналогично тому, как другие предложили) будет:

// Assuming that $data contains your multidimensional array... 
for ($i = 0; $i < count($data); $i++) 
{ 
    if (strstr($data[$i]['country'], ', ')) 
    { 
     $data[$i]['country'] = explode(', ', $data[$i]['country']); 
    } 
} 

Кроме того, обратите внимание, что вы на самом деле не нужно использовать strpos() - strstr() работает отлично здесь.

+0

-1 за отсутствие кода и отсутствие функции StrPos. –

+0

Недостаток кода, конечно, но strpos не требуется. – Anthony

+0

strpos будет лучше, нет + от меня. – OIS

1

Вы можете использовать функцию preg_split и регулярное выражение для разбиения строки:

foreach ($array as $key => $item) { 
    if (strpos($item['country'], ',') !== false) { // check if string contains a comma 
     $array[$key]['country'] = preg_split('/,\s*/', $item['country']); 
    } 
} 
+0

Зачем использовать preg_split, когда есть прекрасная функция explode()? –

+1

@Paolo Bergantino: Для удаления возможных символов пробела. – Gumbo

+2

Почему бы просто не включить пробел в разделителе для explode()? preg_split() кажется вроде как overkill здесь ... – hbw

0
$a = Array (
    0 => Array 
     (
      "title" => "Star Trek - Viaje a las estrellas", 
      "country" => "Venezuela, Spain, long title, poster title" 
     ), 

    1 => Array 
     (
      "title" => "Viaje a Las Estrellas", 
      "country" => "Venezuela" 
     ) 
); 
$res = array();  
    foreach($a as $k => $v){ 
     foreach($v as $key => $value){ 
      switch($key){ 
       case "country":         
        $r = split(",", $value); 
        foreach($r as $index => $val){ 
         $res[$k][$key][$index] = trim($val); 
        } 
        break; 
       default: 
        $res[$k][$key] = $value; 
       break; 
      } 
     } 
    } 

    print_r($res); 

выход:

Array 
(
    [0] => Array 
     (
      [title] => Star Trek - Viaje a las estrellas 
      [country] => Array 
       (
        [0] => Venezuela 
        [1] => Spain 
        [2] => long title 
        [3] => poster title 
       ) 
     ) 
    [1] => Array 
     (
      [title] => Viaje a Las Estrellas 
      [country] => Array 
       (
        [0] => Venezuela 
       ) 
     ) 
) 
+0

Обратите внимание, что поскольку вы взорвали строку, используя только «,» в качестве разделителя, в трех значениях в массиве страны есть ведущие пробелы. – hbw

+0

Этот код очень плохой ... – OIS

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