Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
父项下的PHP组数组子项?_Php_Arrays - Fatal编程技术网

父项下的PHP组数组子项?

父项下的PHP组数组子项?,php,arrays,Php,Arrays,我有一个返回以下内容的数组: $products = [ 'product' => [ [ "product_parent" => "Parent Name 1", "product_name" => "Product 1", ], [ "product_parent" => "Parent Name 1", "product_name" =>

我有一个返回以下内容的数组:

   $products = [
    'product' => [
      [
        "product_parent" =>  "Parent Name 1",
        "product_name" =>  "Product 1",
      ],
      [
        "product_parent" =>  "Parent Name 1",
        "product_name" =>  "Product 2",
      ],
      [
        "product_parent" =>  "Parent Name 2",
        "product_name" =>  "Product 1",
      ],
      [
        "product_parent" =>  "Parent Name 3",
        "product_name" =>  "Product 1",
      ]
    ]
  ];
我需要返回一个结构如下的新数组,它是(关联)数组的(索引)数组

我已经尝试了各种foreach循环,但我无法找到一种方法来获得像上面所述的所需输出那样正确的索引集

我所尝试的:

我最初也在研究这个方法,它效率更高,因为它可以减少查询并提高性能。希望这对将来的人有所帮助

  $variables = [];

  foreach($query_results as $key => $group) {
    $sub_groups = $this->db->select('*')
    ->from('products')
    ->where('parent_id', $group['id'])
    ->get();

    $variables[0]['product'][$key]['product_group'] = $group['product_name'];
    $variables[0]['product'][$key]['product_info']  = array_values($sub_groups->result_array());
  }

这将返回我上面希望的数组结构类型,但性能更好。

您可以使用
array\u reduce
来实现这一点

$products = array(
    'product' => array(
      array(
        "product_parent" =>  "Parent Name 1",
        "product_name" =>  "Product 1",
      ),
      array(
        "product_parent" =>  "Parent Name 1",
        "product_name" =>  "Product 2",
      ),
      array(
        "product_parent" =>  "Parent Name 2",
        "product_name" =>  "Product 1",
      ),
      array(
        "product_parent" =>  "Parent Name 3",
        "product_name" =>  "Product 1",
      )
    )
);

//
$result = array_reduce($products['product'], function($c, $v){
    if ( !isset( $c[ $v['product_parent'] ] ) ) $c[ $v['product_parent'] ] = array( 'product_name' => $v[ "product_parent" ], 'product_info' => array() );
    $c[ $v['product_parent'] ]["product_info"][] = array( "product_name" => $v[ "product_name" ] );     
    return $c;
}, array());

//Constructing the final array
$result = array( 'product' => array_values( $result ) );


echo "<pre>";
print_r( $result );
echo "</pre>";

医生:

对于一个销售代表>1k的人来说,这是一个非常不自然的问题。展示你的尝试,告诉我们哪里出了问题等等。你是对的。我道歉。我会用我试过但没用的东西来详细说明这个问题。这正是我想要的。很抱歉,没有用我已经尝试过的东西更好地详细说明我的问题。再次感谢你!很高兴帮助@Miura shi
$products = array(
    'product' => array(
      array(
        "product_parent" =>  "Parent Name 1",
        "product_name" =>  "Product 1",
      ),
      array(
        "product_parent" =>  "Parent Name 1",
        "product_name" =>  "Product 2",
      ),
      array(
        "product_parent" =>  "Parent Name 2",
        "product_name" =>  "Product 1",
      ),
      array(
        "product_parent" =>  "Parent Name 3",
        "product_name" =>  "Product 1",
      )
    )
);

//
$result = array_reduce($products['product'], function($c, $v){
    if ( !isset( $c[ $v['product_parent'] ] ) ) $c[ $v['product_parent'] ] = array( 'product_name' => $v[ "product_parent" ], 'product_info' => array() );
    $c[ $v['product_parent'] ]["product_info"][] = array( "product_name" => $v[ "product_name" ] );     
    return $c;
}, array());

//Constructing the final array
$result = array( 'product' => array_values( $result ) );


echo "<pre>";
print_r( $result );
echo "</pre>";
Array
(
    [product] => Array
        (
            [0] => Array
                (
                    [product_name] => Parent Name 1
                    [product_info] => Array
                        (
                            [0] => Array
                                (
                                    [product_name] => Product 1
                                )

                            [1] => Array
                                (
                                    [product_name] => Product 2
                                )

                        )

                )

            [1] => Array
                (
                    [product_name] => Parent Name 2
                    [product_info] => Array
                        (
                            [0] => Array
                                (
                                    [product_name] => Product 1
                                )

                        )

                )

            [2] => Array
                (
                    [product_name] => Parent Name 3
                    [product_info] => Array
                        (
                            [0] => Array
                                (
                                    [product_name] => Product 1
                                )

                        )

                )

        )

)