PHP重构基于相同值的数组


PHP refactoring arrays based on same values

我有一个数组,如下所示:

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;     
        }