original_string: public function comma2array($string) {
  
          $foundquotes  = array();
          $foundconcats = array();
  
          // Extract all the concat elements from the string
          preg_match_all("/(CONCAT\(.*?\))/is", $string, $matches);
          foreach (array_unique($matches[0]) as $key=>$value) {
              $foundconcats['<#'.$key.'#>'] = $value;
          }
          if (!empty($foundconcats)) {
              $string = str_replace($foundconcats,array_keys($foundconcats),$string);
          }
  
          // Extract all the quoted elements from the string (skipping
          // backslashed quotes that are part of the content.
          preg_match_all("/(''|'.*?[^\\\\]')/is", $string, $matches);
          foreach (array_unique($matches[0]) as $key=>$value) {
              $foundquotes['<%'.$key.'%>'] = $value;
          }
          if (!empty($foundquotes)) {
              $string = str_replace($foundquotes,array_keys($foundquotes),$string);
          }
  
          // Explode safely the string
          $arr = explode (',', $string);
  
          // Put the concat and quoted elements back again, trimming every element
          if ($arr) {
              foreach ($arr as $key => $element) {
                  // Clear some spaces
                  $element = trim($element);
                  // Replace the quoted elements if exists
                  if (!empty($foundquotes)) {
                      $element = str_replace(array_keys($foundquotes), $foundquotes, $element);
                  }
                  // Replace the concat elements if exists
                  if (!empty($foundconcats)) {
                      $element = str_replace(array_keys($foundconcats), $foundconcats, $element);
                  }
                  // Delete any backslash used for quotes. XMLDB stuff will add them before insert
                  $arr[$key] = str_replace("\\'", "'", $element);
              }
          }
  
          return $arr;
      }
code: public function comma2array($string) {
  
          $foundquotes  = array();
          $foundconcats = array();
  
          // Extract all the concat elements from the string
          preg_match_all("/(CONCAT\(.*?\))/is", $string, $matches);
          foreach (array_unique($matches[0]) as $key=>$value) {
              $foundconcats['<#'.$key.'#>'] = $value;
          }
          if (!empty($foundconcats)) {
              $string = str_replace($foundconcats,array_keys($foundconcats),$string);
          }
  
          // Extract all the quoted elements from the string (skipping
          // backslashed quotes that are part of the content.
          preg_match_all("/(''|'.*?[^\\\\]')/is", $string, $matches);
          foreach (array_unique($matches[0]) as $key=>$value) {
              $foundquotes['<%'.$key.'%>'] = $value;
          }
          if (!empty($foundquotes)) {
              $string = str_replace($foundquotes,array_keys($foundquotes),$string);
          }
  
          // Explode safely the string
          $arr = explode (',', $string);
  
          // Put the concat and quoted elements back again, trimming every element
          if ($arr) {
              foreach ($arr as $key => $element) {
                  // Clear some spaces
                  $element = trim($element);
                  // Replace the quoted elements if exists
                  if (!empty($foundquotes)) {
                      $element = str_replace(array_keys($foundquotes), $foundquotes, $element);
                  }
                  // Replace the concat elements if exists
                  if (!empty($foundconcats)) {
                      $element = str_replace(array_keys($foundconcats), $foundconcats, $element);
                  }
                  // Delete any backslash used for quotes. XMLDB stuff will add them before insert
                  $arr[$key] = str_replace("\\'", "'", $element);
              }
          }
  
          return $arr;
      }
code_tokens: public function comma2array ( $ string ) { $ foundquotes = array ( ) ; $ foundconcats = array ( ) ; // Extract all the concat elements from the string preg_match_all ( "/(CONCAT\(.*?\))/is" , $ string , $ matches ) ; foreach ( array_unique ( $ matches [ 0 ] ) as $ key => $ value ) { $ foundconcats [ '<#' . $ key . '#>' ] = $ value ; } if ( ! empty ( $ foundconcats ) ) { $ string = str_replace ( $ foundconcats , array_keys ( $ foundconcats ) , $ string ) ; } // Extract all the quoted elements from the string (skipping // backslashed quotes that are part of the content. preg_match_all ( "/(''|'.*?[^\\\\]')/is" , $ string , $ matches ) ; foreach ( array_unique ( $ matches [ 0 ] ) as $ key => $ value ) { $ foundquotes [ '<%' . $ key . '%>' ] = $ value ; } if ( ! empty ( $ foundquotes ) ) { $ string = str_replace ( $ foundquotes , array_keys ( $ foundquotes ) , $ string ) ; } // Explode safely the string $ arr = explode ( ',' , $ string ) ; // Put the concat and quoted elements back again, trimming every element if ( $ arr ) { foreach ( $ arr as $ key => $ element ) { // Clear some spaces $ element = trim ( $ element ) ; // Replace the quoted elements if exists if ( ! empty ( $ foundquotes ) ) { $ element = str_replace ( array_keys ( $ foundquotes ) , $ foundquotes , $ element ) ; } // Replace the concat elements if exists if ( ! empty ( $ foundconcats ) ) { $ element = str_replace ( array_keys ( $ foundconcats ) , $ foundconcats , $ element ) ; } // Delete any backslash used for quotes. XMLDB stuff will add them before insert $ arr [ $ key ] = str_replace ( "\\'" , "'" , $ element ) ; } } return $ arr ; }
docstring: Returns one array of elements from one comma separated string,
  supporting quoted strings containing commas and concat function calls
  @param string $string
  @return array
docstring_tokens: Returns one array of elements from one comma separated string supporting quoted strings containing commas and concat function calls