2013-09-05 2 views
0

У меня такой массив;Разбиение массива при сравнении ключей в PHP

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

Здесь в течение первых двух значений database name и table name являются одинаковыми. Имя поля здесь не так важно. Для третьего значения имя базы данных и имя таблицы различаются. Я хочу добиться того, что хочу разбить этот массив на отдельные массивы, сравнив имя базы данных и имя таблицы. Мне нужно добиться чего-то подобного;

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

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

Можно ли сделать что-то подобное ?.

+1

насчет database1.table2.fieldname. где это будет? – rakeshjain

+0

Это также должно быть в отдельном массиве. – BKM

ответ

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 
        ) 

      ) 

    ) 
) 
+0

Благодарим за решение. Но моя проблема в том, что имя «database1» и все идет динамически. Поэтому сравнивать с именами базы данных и таблиц просто невозможно. – BKM

+0

См. Мой отредактированный ответ ... от $ new_arr. Вы можете получить желаемый результат. Вы можете сделать это из этого – Gautam3164

+0

Из вашего ответа, если мне нужно получить значение «[database1.table1.fieldname] => test« Мне нужно используйте $ new_arr ['database1'] ['table1'] [0]. Но моя проблема в том, что я не могу использовать здесь 'database1' и 'table1'. Вместо этого мне тоже нужно делать динамически. Любое решение для этого ?. – BKM

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

Смежные вопросы