我正在将MySQL数据从一个系统转换为另一个系统,而数据库结构并不完全相同。一个数据库字段包含多个参数,格式如下:
option1=value1
option2=value2
option3=value3
是的,它是一个带换行符的文本字段。我需要从一个字段中获取数据(使用PHP)并从中生成变量。例如,我需要将“option1 = value1”转换为包含值“value1”的变量$ option1。
我已将此字段的数据提取到一个数组中,并尝试将该数据压缩成一个字符串,我可以从中创建变量......但是没有运气。要么我做得不对,要么就是不正确的方向。
我正在尝试这样的事情:
$string = implode("&",$array);
echo $string;
...但我只是一遍又一遍地收到一堆“通知:数组到字符串转换”消息以及“& Array”的回声。帮助赞赏!
更新: 为了进一步说明,我意识到我需要一个带有用户ID的二级数组(从上面提到的选项值中拉出来自同一个表)...然后每个ID都有一个包含选项的嵌套数组值。
答案 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没有。