У вас такой массив
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 цикла) субмарины с ожидаемыми результатами. Из результатов я должен написать дополнительный код, где я беру (сохраняю) первый, пятый и девятый подмары.
Код выглядит очень длинным. Есть ли лучший (более короткий, более простой) способ получить результат?
$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);
$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);