Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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,我有这样一个数组: array:3 [▼ 0 => array:7 [▼ "feed_key" => "URL" "table_key" => "feed_url" "table_name" => "data_feeds" ] 1 => array:7 [▼ "feed_key" => "network_id" "table_key" => "name"

我有这样一个数组:

  array:3 [▼
   0 => array:7 [▼
       "feed_key" => "URL"
       "table_key" => "feed_url"
       "table_name" => "data_feeds"
     ]
   1 => array:7 [▼
       "feed_key" => "network_id"
       "table_key" => "name"
       "table_name" => "networks"
    ]
   2 => array:7 [▼
      "feed_key" => "product_name"
      "table_key" => "product_description"
      "table_name" => "products"
   ]
]
    $data = [
        'products' => [
            'some_table_key' => 'some_field_key',
            'another_table_key' => 'another_field_key',
        ],
        'networks' => [
            'some_table_key' => 'some_field_key',
            'another_table_key' => 'another_field_key',
        ]
        // .. and so on
    ];
这可以包含许多数组,这些数组的表名值以任意顺序重复

我要做的是按表名对数组进行分组,并将其重新格式化为以下格式:

  array:3 [▼
   0 => array:7 [▼
       "feed_key" => "URL"
       "table_key" => "feed_url"
       "table_name" => "data_feeds"
     ]
   1 => array:7 [▼
       "feed_key" => "network_id"
       "table_key" => "name"
       "table_name" => "networks"
    ]
   2 => array:7 [▼
      "feed_key" => "product_name"
      "table_key" => "product_description"
      "table_name" => "products"
   ]
]
    $data = [
        'products' => [
            'some_table_key' => 'some_field_key',
            'another_table_key' => 'another_field_key',
        ],
        'networks' => [
            'some_table_key' => 'some_field_key',
            'another_table_key' => 'another_field_key',
        ]
        // .. and so on
    ];

使用php7最干净的方法是什么?尽可能避免使用foreach。

这非常简单,可以使用
foreach
来完成(我不知道为什么要避免使用foreach)

这将为您提供:

array (size=3)
  'data_feeds' => 
    array (size=1)
      'feed_url' => string 'URL' (length=3)
  'networks' => 
    array (size=1)
      'name' => string 'network_id' (length=10)
  'products' => 
    array (size=1)
      'product_description' => string 'product_name' (length=12)

@MehdiBounya来自第一个多维数组,每个数组上面都包含feed\u key、table\u key、table\u name,因此对于第一个数组中的数组0,它应该是
[data\u feeds=>[feed\u url=>url]]
我现在明白了,你能发布你到目前为止尝试了什么,我可以帮你吗?首先,我使用usort和spaceship操作符对数组进行排序,按表名对数组进行排序,然后我将一个名为table的变量设置到第一个表名->值,并使用该值创建一个新数组,然后如果然后附加表键=>提要键到foreach中的那个数组,检查table_name=table_name,如果它发生了变化,我会推到一个包含数组,并用一个新table_name值的键启动一个新数组,但我想避免使用foreach,并使用类似array_map的东西。你应该发布你在问题中编写的代码。这就是我所拥有的:
$data=[];foreach($feed_-map as$map){$data[$map['table_-name']][$map['table_-key']]=$map['feed_-key']];}
但这不是我的问题你的问题是什么?你能通过更新你的问题来解释更多吗?使用php7最干净的方法是什么?如果可能的话,避免使用foreach。这是我能想到的最干净的方法,除了foreach,我没有看到其他可能的方法,你避免使用foreach有什么具体的原因吗?我同意你的看法,我希望我可以使用一些清洁的方法,但也看不到任何其他方法,主要原因是它是一个非常大的数据集,foreach+在内存中加载另一个大数组,我想我可以将它分解成单独的小数组,这是我唯一的选择,谢谢你的帮助