如何在PHP中将CSV字符串转换为关联数组

如何在PHP中将CSV字符串转换为关联数组,php,mysql,database,string,associative-array,Php,Mysql,Database,String,Associative Array,几乎类似的问题重复出现 我正在更新并从数据库中获取不同问题的字符串 假设从数据库中获取值后,我的变量之一$str如下所示 $str = "1:1,2:1,3:2,5:6"; 或 或 如何在PHP中将任何字符串或几乎不同的字符串转换为关联数组 提前谢谢。我试图寻找答案,但没有找到类似的答案 代码我试图使它成为一个关联数组 $firstArr = explode(',', $str); foreach (firstArr as $value) { $secondArr = explode

几乎类似的问题重复出现

我正在更新并从数据库中获取不同问题的字符串

假设从数据库中获取值后,我的变量之一
$str
如下所示

$str = "1:1,2:1,3:2,5:6";

如何在PHP中将任何字符串或几乎不同的字符串转换为关联数组

提前谢谢。我试图寻找答案,但没有找到类似的答案

代码我试图使它成为一个关联数组

$firstArr = explode(',', $str);

foreach (firstArr as $value) {
    $secondArr = explode(':', $value);
}
试试这个:

$final_array = Array();
$str = "1|1,2|1,3|2,5|6";
$arr1 = explode(",", $str);

// this gives $arr1 as 
// array(4) { [0]=> string(3) "1|1" [1]=> string(3) "2|1" [2]=> string(3) "3|2" [3]=> string(3) "5|6" } 
// iterate through $arr1 and further split it on | using explode function
foreach ($arr1 as $k=>$v){
    $arr2 = explode("|", $v);
    // $arr2 would be like 
    // array(2) { [0]=> string(1) "1" [1]=> string(1) "1" }  etc.
    $final_array[$arr2[0]] = $arr2[1];
}

print_r($final_array);
// gives Array ( [1] => 1 [2] => 1 [3] => 2 [5] => 6 ) 

但正如Sylvain所提到的,您可能还希望查看数据库规范化部分。

使用PHP的
str_split
explode
函数:

$str = "1:1,2:1,3:2,5:6";
$split = str_split($str, 4);
$explode = explode(":", $split);
$array = array();
for($i = 0; $i <= count($explode); $i++)
{
    $array[] = ($explode[$i]);
}
$str=“1:1,2:1,3:2,5:6”;
$split=str_split($str,4);
$explode=explode(“:”,$split);
$array=array();
对于($i=0;$iA),首先不应该在数据库中存储这样的字符串。这是一种代码气味。除此之外,它还表明您没有充分规范化您的模式

B) 例如,如果您确实需要处理此类字符串,您可以这样做

$string = "1|1,2|1,3|2,5|6";
$tempArray = explode(",", $string);
$finalArray = array();

foreach ($tempArray as $pair) {
    $subArray = explode("|", $pair);
    $finalArray[$subArray[0]] = $subArray[1];
}
这将导致

数组([1]=>1[2]=>1[3]=>2[5]=>6)

如果您
打印它


或者您可以使用其他字符串函数,如substring等,从$pairs中获取键和值。

提示:到目前为止您尝试了什么?您希望关联数组看起来像什么?数组([1]=>1[2]=>1[3]=>2..等等)如果您从数据库中获取
“1:1,2:1,3:2,5:6”
,您可能会遇到严重问题
$str = "1:1,2:1,3:2,5:6";
$split = str_split($str, 4);
$explode = explode(":", $split);
$array = array();
for($i = 0; $i <= count($explode); $i++)
{
    $array[] = ($explode[$i]);
}
/**
 * Converts CSV to associative array
 *
 * @param string $str
 *
 */
function csv2associative_array($str) {
   $csv_items = preg_split('/\s*\,\s*/',$str);
   $items = array();
   foreach ($csv_items as $x => $csv_item) {
      list($key,$value) = preg_split('/\W/',$csv_item,2);
      if ($key && $value) {
         $items[$key] = $value;
      }
      else {
         trigger_error("keys/values not found for item #$x");
      }
   }
   return $items;
}
$string = "1|1,2|1,3|2,5|6";
$tempArray = explode(",", $string);
$finalArray = array();

foreach ($tempArray as $pair) {
    $subArray = explode("|", $pair);
    $finalArray[$subArray[0]] = $subArray[1];
}