通过比较PHP中的键来拆分数组

时间:2013-09-05 05:03:30

标签: php arrays split

我有这样的数组;

Array
(
    [database1.table1.fieldname] => "test"
    [database1.table1.fieldname1] => "test1"
    [database2.table2.fieldname] => "test2"
)

对于前两个值,database nametable name是相同的。 Fieldname在这里并不那么重要。对于第三个值,数据库名称和表名称是不同的。我想要实现的是我想通过比较数据库名称和表名将这个数组拆分成单独的数组。我需要实现这样的目标;

Array
(
    [database1.table1.fieldname] => "test"
    [database1.table1.fieldname1] => "test1"
)

Array
(
    [database2.table2.fieldname] => "test2"
)

是否可以做这样的事情?。

2 个答案:

答案 0 :(得分:2)

尝试

foreach($my_arr as $key=>$value) {

    $new_key = explode('.',$key);
    if($new_key[0] == "datebase1" && $new_key[1] == "table1") {
         $arr1[$key] = $value;
    } elseif ($new_key[0] == "datebase2" && $new_key[1] == "table2") {
         $arr2[$key] = $value;
    }
}

或者您可以尝试

foreach($my_arr as $key=>$value) {

    $new_key = explode('.',$key);
    $new_arr[$new_key[0]][$new_key[1]][] = array($key=>$value);
}
print_r($new_arr);

输出

Array
(
  [database1] => Array
    (
        [table1] => Array
            (
                [0] => Array
                    (
                        [database1.table1.fieldname] => test
                    )

                [1] => Array
                    (
                        [database1.table1.fieldname1] => test1
                    )

            )
    )

  [database2] => Array
    (
        [table2] => Array
            (
                [0] => Array
                    (
                        [database2.table2.fieldname] => test3
                    )

            )

    )
)

答案 1 :(得分:1)

在这里。接受它。

function splitDatabaseArray($array)
    {
    ksort($array);
    $return = array();
    $last_database_table = array();
    foreach ($array as $index => $value)
        {
        $database_table = array();
        list($database_table[0], $database_table[1]) = explode('.', $index);
        if ($last_database_table != $database_table)
            $row = &$return[];
        $last_database_table = $database_table;
        $row[$index] = $value;
        }
    return $return;
    }

$array = array
    (
    'database1.table1.fieldname' => "test",
    'database1.table1.fieldname1' => "test1",
    'database2.table2.fieldname' => "test2");

var_dump(splitDatabaseArray($array));

http://3v4l.org/TC542