2014-11-10 2 views
0

Have массив как этотИз одномерного массива должен получить многомерный массив на основе ключей

Array 
(
[0] => Array 
    (
     [CategoriesName_1] => Happy Birthday 
     [CategoriesName_2] => Flowers 
     [CategoriesName_3] => Fruit baskets 
     [CategoriesDescription_1] => 
     [CategoriesDescription_2] => 
     [CategoriesDescription_3] => Fruit baskets descr 
     [CategoriesUrl_1] => happy-birthday 
     [CategoriesUrl_2] => flowers 
     [CategoriesUrl_3] => fruit-baskets 
    ) 

) 

Хотите, чтобы преобразовать его в массив, как это (нужно, чтобы получить этот результат)

Array 
(
[0] => Array 
    (
     [CategoriesName] => Happy Birthday 
     [CategoriesDescription] => 
     [CategoriesUrl] => happy-birthday 
    ) 
[1] => Array 
    (
     [CategoriesName] => Flowers 
     [CategoriesDescription] => 
     [CategoriesUrl] => flowers 
    ) 
[2] => Array 
    (
     [CategoriesName] => Fruit baskets 
     [CategoriesDescription] => Fruit baskets descr 
     [CategoriesUrl] => fruit-baskets 
    )  

) 

Начальная (одномерная матрица) имеют ключи CategoriesName_1, CategoriesUrl_1, CategoriesDescription_1. Для каждого номера (_1, _2, _3) хотите поместить имя, URL и описание вместе и создать отдельный подмассив.

В первом создал 3 отдельных массивы

foreach ($array_with_breadcrumbs[0] as $key_brcr => $val_brcr) { 

if('CategoriesUrl_' == substr($key_brcr,0,14)){ 
$array_url_brcr[] = array('CategoriesUrl' => $val_brcr); 
} 

if('CategoriesName_' == substr($key_brcr,0,15)){ 
$array_name_brcr[] = array('CategoriesName' => $val_brcr); 
} 

if('CategoriesDescription_' == substr($key_brcr,0,22)){ 
$array_description_brcr[] = array('CategoriesDescription' => $val_brcr); 
} 

}//foreach ($array_with_breadcrumbs[0] as $key_brcr => $val_brcr) { 

Затем цикл через все три массива, как этот

foreach($array_url_brcr as $i_url => $val_url){ 

    foreach($array_name_brcr as $i_name => $val_name){ 

    foreach($array_description_brcr as $i_description => $val_description){ 

     if($i_url == $i_name) { 

     $combined_arr_brcr[] = array( 
     'CategoriesUrl' => $val_url['CategoriesUrl'], 
     'CategoriesName' => $val_name['CategoriesName'], 
     'CategoriesDescription' => $val_description['CategoriesDescription'] 
    ); 

     } 

    } 

    } 

} 

Я получаю девять (3 массивов * 3 петли) Подмассивы с не ожидаемыми результатами. Из результатов я должен написать дополнительный код, где я беру (сохраняю) первый, пятый и девятый подмары.

Код выглядит очень длинным. Есть ли лучший (более короткий, более простой) способ получить результат?

+0

Как создать первый массив? –

+0

Первый массив из mysql 2 arr, затем 'array_replace_recursive' – user2118559

+0

Итак, ваша структура базы данных выглядит так: КатегорииName_1, CategoriesName_2, CategoriesName_3 и т. Д.? И вы получаете эти данные с помощью 'SELECT CategoriesName_1, CategoriesName_2, CategoriesName_3, ... FROM table'? –

ответ

1
$final_array=array(); 
for ($i=0; $i < 3; $i++) { 
    $k=$i+1; 
    $final_array[$i]=array(
     'CategoriesName'=>$array_with_breadcrumbs[0]['CategoriesName_'.$k], 
     'CategoriesDescription'=>$array_with_breadcrumbs[0]['CategoriesDescription_'.$k], 
     'CategoriesUrl'=>$array_with_breadcrumbs[0]['CategoriesUrl_'.$k], 
     ); 
} 

print_r($final_array); 

если количество ключей больше, чем 3, вы можете использовать этот

$final_array=array(); 
$no_of_keys=3; //change the value of number of keys 
$vars=array('CategoriesName','CategoriesDescription','CategoriesUrl'); // add variables 

for ($i=0; $i < $no_of_keys; $i++) { 
    $k=$i+1; 
    $final_array[$i]=array(); 
    foreach ($vars as $var) { 
     $final_array[$i][$var]=$array_with_breadcrumbs[0][$var."_".$k] 
    } 
} 

print_r($final_array); 
0
$source = $array_with_breadcrumbs[0]; 
$result = []; 

for ($i = 1; $i <= 3; $i++) 
{ 
    array_push($result, 
    [ 
     'CategoriesName' => $source['CategoriesName_' . $i], 
     'CategoriesDescription' => $source['CategoriesDescription_' . $i], 
     'CategoriesUrl' => $source['CategoriesUrl_' . $i] 
    ]); 
} 

var_dump($result); 
Смежные вопросы