【问题标题】:How to convert CSV String to Associative array in PHP如何在 PHP 中将 CSV 字符串转换为关联数组
【发布时间】:2013-08-08 18:17:27
【问题描述】:

重复几乎类似的问题。

我正在从数据库中更新和获取字符串以解决不同的问题。

在从数据库中获取值后,我的变量 $str 之一看起来像以下之一

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

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

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

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

提前致谢。我尝试了答案,但没有找到类似的东西。

我尝试将其设为关联数组的代码

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

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

【问题讨论】:

标签: php mysql database string associative-array


【解决方案1】:

试试这个:

$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 所提到的,您可能还想查看您的数据库规范化部分。

【讨论】:

    【解决方案2】:

    使用 PHP 的 str_splitexplode 函数:

    $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]);
    }
    

    在每个逗号(4 个字符)之后,字符串拆分。然后在每个 : 爆炸值之后。然后把它放在一个数组中。

    【讨论】:

      【解决方案3】:
      /**
       * 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;
      }
      

      【讨论】:

        【解决方案4】:

        A) 首先,您不应该将此类字符串存储在数据库中。这是一种代码气味。除其他外,它表明您对架构的规范化不够。

        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)

        如果你print_r它。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-04
          • 2013-04-27
          • 1970-01-01
          • 2012-06-10
          • 2019-06-26
          • 2012-03-01
          相关资源
          最近更新 更多