【问题标题】:From one dimensional array must get multidimensional array based on keys从一维数组必须得到基于键的多维数组
【发布时间】:2015-01-06 11:56:03
【问题描述】:

有这样的数组

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_1CategoriesUrl_1CategoriesDescription_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 个循环)子数组,但结果不是预期的。根据结果​​,我必须编写额外的代码来获取(保留)第一个、第五个和第九个子数组。

代码看起来很长。有没有更好(更短、更简单)的方法来获得结果?

【问题讨论】:

  • 如何创建第一个数组?
  • mysql 2 arr 中的第一个数组,然后是array_replace_recursive
  • 那么,您的数据库结构看起来像:CategoriesName_1、CategoriesName_2、CategoriesName_3 等?你使用SELECT CategoriesName_1, CategoriesName_2, CategoriesName_3, ... FROM table获取这些数据?
  • 不,在数据库中是CategoriesNameCategoriesUrl 等。我根据 url 获得的初始数组。路漫漫其修远兮(这里写不合理;代码太长,与题目无关)

标签: php arrays multidimensional-array


【解决方案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);

【讨论】:

    【解决方案2】:
    $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);
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多