PHP-基于原始数组中的分解名称创建新的数组值


PHP - creating new array value based on explode name in the original array

我有这样格式的数组:

$components = [
    [
        'name'   => 'ADIPIC ACID',
        'cas'    => '123',
        'einecs' => '321'
    ],
    [
        'name'   => 'ADIPIC ACID/DIMETHY- LAMINOHYDROXY- PROPYL DIETHYLENE- TRIAMINE COPOLYMER',
        'cas'    => '456',
        'einecs' => '654'
    ]
]

我需要找到每个具有/字符的name,将其分解,并在$components数组中创建一个新条目,其中caseinecs

此外,名称的第一部分将具有原始条目中的caseinecs值。

预期数组:

$components = [
        [
            'name'   => 'ADIPIC ACID',
            'cas'    => '123',
            'einecs' => '321'
        ],
        [
            'name'   => 'ADIPIC ACID',
            'cas'    => '456',
            'einecs' => '654'
        ],[
            'name'   => 'DIMETHY- LAMINOHYDROXY- PROPYL DIETHYLENE- TRIAMINE COPOLYMER',
            'cas'    => '',
            'einecs' => ''
        ]
    ]

我该怎么做?

我承认这很粗糙,它没有在一个值中考虑多个/字符,但它确实返回了预期的结果。

        foreach( $components as $index=> $arr ){
            foreach( $arr as $key => $value ){
                if( $key=='name' && strstr( $value, '/' ) ){
                    list($pre,$post)=explode('/',$value);
                    $components[$index][$key]=$pre;
                    $components[]=array('name'=>$post,'cas'=>'','einecs'=>'');
                }
            }
        }
<?php
$components = [
    [
        'name'   => 'ADIPIC ACID',
        'cas'    => '123',
        'einecs' => '321'
    ],
    [
        'name'   => 'ADIPIC ACID/DIMETHY- LAMINOHYDROXY- PROPYL DIETHYLENE- TRIAMINE COPOLYMER',
        'cas'    => '456',
        'einecs' => '654'
    ]
];
$new = [];
foreach ($components as &$component) {
    if ($items = explode('/', $component['name'])) {
        $component['name'] = array_shift($items);
        $new = array_merge($new, $items);
    }
}
foreach ($new as $item) {
    $components[] = ['name' => $item, 'cas' => '', 'einecs' => ''];
}
var_dump($components);

我会尝试这样的方法,使用explode函数,在每个组件的名称上使用'/'字符。然后,我将创建一个新的数组,其中包含所有新的组件,并获取正在评估的组件的值。

$newComponents = array();
foreach($components as $component) {
  foreach(explode('/', $component['name']) as $newComponentName) {
    $newComponents[] = array('name'   =>$newComponentName, 
                             'cas'    => $component['cas'],
                             'einecs' => $component['einecs']);
  }
}
foreach($components as $component)
{
   if(strpos($component["name"],"/") !== false){
      $temp = explode("/",$component["name"]);
      $components[] = new array("name"=>$temp[1], "cas"=>"", "einecs"=>"");
   }
}