我有一个数组,如下所示:
Array
(
[0] => Array
(
[insert_input_id] => 1
[action_id] => 1
[table] => users
[name] => nickname
[parent] => nickname
[owner] =>
)
[1] => Array
(
[insert_input_id] => 2
[action_id] => 1
[table] => users
[name] => email
[parent] => email
[owner] =>
)
[2] => Array
(
[insert_input_id] => 3
[action_id] => 1
[table] => users
[name] => name
[parent] => name
[owner] =>
)
[3] => Array
(
[insert_input_id] => 4
[action_id] => 1
[table] => users
[name] => surname
[parent] => surname
[owner] =>
)
[4] => Array
(
[insert_input_id] => 5
[action_id] => 1
[table] => social
[name] => social_id
[parent] => social_id
[owner] => user_id
)
[5] => Array
(
[insert_input_id] => 6
[action_id] => 1
[table] => social
[name] => social_token
[parent] => social_token
[owner] => user_id
)
[6] => Array
(
[insert_input_id] => 7
[action_id] => 1
[table] => social
[name] => social_type
[parent] => social_type
[owner] => user_id
)
)
从上面的数组中可以看出,有些具有相同的[table]
值。在这种特定情况下,我们有[table] => social
和[table] => users
。因此,我试图基于相同的表重构数组,并试图获得以下结果。
Array
(
[users] => Array
(
[owner] =>
[nickname] => giorgio
[email] => giorgia@m.com
[name] => giorgia
[surname] => giorgio
)
[social] => Array
(
[owner] => user_id
[social_id] => 23123
[social_token] =>
[social_type] => facebook
)
)
这就是我用我的PHP代码所做的:
foreach ($inserts as $insert) {
if (isset($data[$insert['parent']])) {
$vals['owner'] = $insert['owner'];
$vals[$insert['name']] = $data[$insert['parent']];
$tables[$insert['table']] = $vals;
}
}
echo '<pre>'; print_r($tables); echo '</pre>';
CCD_ 4只是由$_GET
或$_POST
请求给出的数据。
关于分配正确的$data
,一切都很好。问题是我得到了以下数组:
Array
(
[users] => Array
(
[owner] =>
[nickname] => giorgio
[email] => giorgia@m.com
[name] => giorgia
[surname] => giorgio
)
[social] => Array
(
[owner] => user_id
[nickname] => giorgio
[email] => giorgia@m.com
[name] => giorgia
[surname] => giorgio
[social_id] => 23123
[social_token] =>
[social_type] => facebook
)
)
正如您所看到的,[social]
数组也包含[users]
数组的元素,这是错误的。
我该如何避免这种情况?
有什么建议吗?
假设foreach中插入的数组与通过get/POST获得的数据相同同样,如果你需要通过给定的表来连接这些数组值,你可以这样做:
$refractored = array(); // refractored data
//insert has table key
foreach($inserts as $insert)
{
if(array_key_exist($insert["table"]))
{
$refractored[$insert["table"]] = array_merge($refractored[$insert["table"]], $insert);
} else {
$refractored[$insert["table"]] = $insert;
}
}
您需要在每次循环运行中重新初始化$vals数组。否则,它的值和键会累积。。。
foreach ($inserts as $insert) {
$vals = array();
if (isset($data[$insert['parent']]))
$vals['owner'] = $insert['owner'];
$vals[$insert['name']] = $data[$insert['parent']];
$tables[$insert['table']] = $vals;
}