我有一个二维数组

array
(
    0 => array
    (
        "id_category" => 3
    , "name" => "mesa plegable"
    ),

    1 => array
    (
        "id_category" => 4
    , "name" => "cama plegable"
    ),

    2 => array
    (
        "id_category" => 5
    , "name" => "sillas plegables"
    ),

    3 => array
    (
        "id_category" => 6
    , "name" => "bicicleta plegable"
    ),

    4 => array
    (
        "id_category" => 7
    , "name" => "carpas plegables"
    ),

    5 => array
    (
        "id_category" => 8
    , "name" => "bicicleta estatica plegable"
    ),

    6 => array
    (
        "id_category" => 9
    , "name" => "bicicleta electrica plegable"
    ),

    7 => array
    (
        "id_category" => 10
    , "name" => "cinta de correr plegable"
    ),

    8 => array
    (
        "id_category" => 11
    , "name" => "carro compra plegable"
    ),

    9 => array
    (
        "id_category" => 12
    , "name" => "mesa plegable cocina"
    ),

    10 => array
    (
        "id_category" => 13
    , "name" => "puertas plegables"
    ),

    11 => array
    (
        "id_category" => 14
    , "name" => "tumbona plegable"
    ),

    12 => array
    (
        "id_category" => 15
    , "name" => "escalera plegable"
    ),

    13 => array
    (
        "id_category" => 16
    , "name" => "mesa plegable pared"
    ),

);

我想要这个结果:

array (
  'mesa' => 
  array (
    0 => 'mesa plegable',
    1 => 'mesa plegable cocina',
    2 => 'mesa plegable pared',
  ),
  'cama' => 
  array (
    0 => 'cama plegable',
  ),
  'sillas' => 
  array (
    0 => 'sillas plegables',
  ),
  'bicicleta' => 
  array (
    0 => 'bicicleta plegable',
    1 => 'bicicleta estatica plegable',
    2 => 'bicicleta electrica plegable',
  ),
  'carpas' => 
  array (
    0 => 'carpas plegables',
  ),
  'cinta' => 
  array (
    0 => 'cinta de correr plegable',
  ),
  'carro' => 
  array (
    0 => 'carro compra plegable',
  ),
  'puertas' => 
  array (
    0 => 'puertas plegables',
  ),
  'tumbona' => 
  array (
    0 => 'tumbona plegable',
  ),
  'escalera' => 
  array (
    0 => 'escalera plegable',
  ),
)

我是一个初学者,所以可能有些事情不是这样做的.请理解;)

$write_element = '';

foreach ($original_array as $element){
 $name= explode(" ",$element['name']);
 $clean_name = $nombre_cat[0];

 $group_by_name = array_map("myfunction",$original_array,$clean_name);
}

function myfunction($original_array,$clean_name)
{
 //this is what I don't know how to do

 if $clean_name exists in $original_array push in new array to return all matches
}

我知道如何在另一个内部运行两个foreach并查找匹配项,但我认为数组映射会更快更干净,对吗?也许我也错了.

你能帮帮我吗

推荐答案

$data-表示原始数据.

$result-表示最终预期输出/结果.

$result = [];

array_map(function ($value) use (&$result) {
    if (!array_key_exists($key = substr($value["name"], 0, strpos($value["name"], " ")), $result)) $result[$key] = [];

    $result[$key][] = $value["name"];

}, $data);

var_export($result);

增编:

或者,你可以按照comment@ryan-vincent的建议使用array_reduce():

我宁愿用array_reduce而不是array_map.为什么?

$result = array_reduce($data, function ($result, $value) {
    if (!array_key_exists($key = substr($value["name"], 0, strpos($value["name"], " ")), $result)) $result[$key] = [];

    $result[$key][] = $value["name"];
    return $result;

}, []);

var_export($result);

Php相关问答推荐

当我们使用PHPUnit时,控制台中的--uses param到底起了什么作用以及如何使用?

如何在Livewire中验证多个 Select 字段

如何发送woocommerce订单跟踪码与短信

msgraph-sdk-php v2如何传递skiptoken到request?

使用PHP和WebSockets或SSE实现实时通知

使用WordPress wp_mail()的邮箱标题无效

有没有可能从composer 过时的输出中隐藏不需要的主要版本?

在PHP中处理Linux输入事件(/dev/input/Event*)

在WooCommercestore 页面上显示库存产品属性的值

为什么PHP PDO忽略NOT NULL约束?

在 WooCommerce 更新结帐事件上动态更新自定义内容

使用 PHP,我可以将 foreach 语句放入瞬态中吗?

在 PHP MySQL 中自动生成账单编号

Symfony:指定 data_class 时,提交的表单获取初始化前不得访问

CodeIgniter 4中嵌套过滤器组不起作用

php preg_match 验证 Tiktok 用户名

如果有很多重定向,PHP curl 的行为不像命令行 curl

PHP 日期格式:ISO8601 与 ISO8601_EXPANDED

来自命令行的 PHP 没有给出正确的结果

根据数组中的文本文件编号显示星级