从db字段中提取部分数据并创建多个变量

时间:2014-06-18 16:35:21

标签: php mysql database variables

我正在将MySQL数据从一个系统转换为另一个系统,而数据库结构并不完全相同。一个数据库字段包含多个参数,格式如下:

option1=value1
option2=value2
option3=value3

是的,它是一个带换行符的文本字段。我需要从一个字段中获取数据(使用PHP)并从中生成变量。例如,我需要将“option1 = value1”转换为包含值“value1”的变量$ option1。

我已将此字段的数据提取到一个数组中,并尝试将该数据压缩成一个字符串,我可以从中创建变量......但是没有运气。要么我做得不对,要么就是不正确的方向。

我正在尝试这样的事情:

$string = implode("&",$array);
echo $string;

...但我只是一遍又一遍地收到一堆“通知:数组到字符串转换”消息以及“& Array”的回声。帮助赞赏!

更新: 为了进一步说明,我意识到我需要一个带有用户ID的二级数组(从上面提到的选项值中拉出来自同一个表)...然后每个ID都有一个包含选项的嵌套数组值。

1 个答案:

答案 0 :(得分:2)

根据您的说明

option1=value1
option2=value2
option3=value3

不是一个数组,而是一个带换行符的文本字段。你应该做

$myarray=explode("\n",$textfield);

获得正确的数组。

从那时起,您尝试的解决方案似乎依赖于将该数组转换为您将通过GET请求传递给另一个页面的查询字符串。就此而言,您可以使用&作为胶水。

但是你也说过需要将数组项转换为变量。为此,您可以使用

形式创建一个新数组
$assocarray=[];
foreach($myarray as $item) {
  $keyvalue=explode('=',$item);
  $assocarray[$keyvalue[0]]=$keyvalue[1];
}

将导致$ assocarray

Array [
    'option1' => value1,
    'option2' => value2,
    'option3' => value3,
];

所以你可以执行

extract($assocarray);

在全局命名空间中获取3个名为$ option1,$ option2和$ option3的变量。

编辑:我看到,出于某种原因,你有嵌套数组。像

这样的东西
$myarray = Array [
                  Array [ 
                     "access_optin=2", 
                     "", 
                     ""
                  ],
                  Array [
                     "show_bio=1",  
                     "show_url=1", 
                     "show_picture=1", 
                     "show_organization=1", 
                     "access_optin=2", 
                     "access_jobtitle=0",  
                     "access_email=0"
                  ]
            ];

并且迭代应该是

$assocarray=[];
foreach($myarray as $subarray) {
    foreach($subarray as $item) {
        $keyvalue=explode('=',$item);
        if(count($keyvalue)==2) $assocarray[$keyvalue[0]]=$keyvalue[1];
    }
}

请注意,我正在验证$ keyvalue数组的大小,因为有些值并非每个值都具有name = value模式。

第二次修改

由于每个$子数组表示不同的用户,因此您还需要将已解析的键/值对存储在子数组中。

$assocarray=[];
foreach($myarray as $user => $subarray) {
    foreach($subarray as $item) {
        $keyvalue=explode('=',$item);
        if(count($keyvalue)==2) $assocarray[$user][$keyvalue[0]]=$keyvalue[1];
    }
}

这假设您的$ user与您需要设置的user_id匹配。否则,您将不得不向后退到$ myarray变量的形式。我担心你需要,因为你的例子从0开始,我敢打赌你的user_id没有。