Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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_Html_Arrays_Multidimensional Array - Fatal编程技术网

Php 如何用键和值分解多维数组

Php 如何用键和值分解多维数组,php,html,arrays,multidimensional-array,Php,Html,Arrays,Multidimensional Array,我有这样一个字符串: $string = Leader,Brian; Elder,Nina,Maria; Member,Duke,Rai,Mike Array ([Leader] => Brian [Elder] => Array ([0] => Nina [1] => Maria) [Member] => Array ([0] => Duke [1] => Rai [2] => Mike)) 我所做的: $explode =

我有这样一个字符串:

$string = Leader,Brian; Elder,Nina,Maria; Member,Duke,Rai,Mike
Array ([Leader] => Brian [Elder] => Array ([0] => Nina [1] => Maria) 
       [Member] => Array ([0] => Duke [1] => Rai [2] => Mike))
我所做的:

$explode = ("; ", $string);
然后它会显示为:

Array ([0] => Leader,Brian [1] => Elder,Nina,Maria [2] => Member,Duke,Rai,Mike)
但我不喜欢这样。我想用key和value创建一个多维数组,如下所示:

$string = Leader,Brian; Elder,Nina,Maria; Member,Duke,Rai,Mike
Array ([Leader] => Brian [Elder] => Array ([0] => Nina [1] => Maria) 
       [Member] => Array ([0] => Duke [1] => Rai [2] => Mike))
如何像这样在表标记html中显示它

Leader  |  Brian
Elder   |  Nina
        |  Maria
Member  |  Duke
        |  Rai
        |  Mike 

NB:如果像这样使用分隔符有困难,您可以更改字符串中的分隔符

我可能会在拆分字符串后遍历数组,然后再次拆分:

$list = explode("; ", $string);
array_walk($list, function(&$element) {
    $names = explode(',', $element);
    // Take the first item off the array type
    $type = array_shift($names);
    // Alter the array in-place to create the sub-array
    $element = [$type => $names]
});
你需要两次“爆炸”


您需要在两个分隔符上分解两次,例如:

<?php
$string = "Leader,Brian; Elder,Nina,Maria; Member,Duke,Rai,Mike";

$result = array();
$parts = explode(";", $string);

foreach ($parts as $part)
{
    $kv = explode(",", $part);
    $result[array_shift($kv)] = $kv;
}

// result:
echo '<pre>';
print_r($result);
echo '</pre>';
?>

你的
explode
是很好的第一步

下一步是迭代其结果并再次分解。 然后(在同一循环中)使用第二个分解结果的第一个元素作为键,其余元素作为值

array(3) {
  ["Leader"]=>
  array(1) {
    [0]=>
    string(5) "Brian"
  }
  ["Elder"]=>
  array(2) {
    [0]=>
    string(4) "Nina"
    [1]=>
    string(5) "Maria"
  }
  ["Member"]=>
  array(3) {
    [0]=>
    string(4) "Duke"
    [1]=>
    string(3) "Rai"
    [2]=>
    string(4) "Mike"
  }
}
结果:

<?php
$string = 'Leader,Brian; Elder,Nina,Maria; Member,Duke,Rai,Mike';

$explode = array_map(function($v){return explode(',', $v);}, explode(';', $string));

$new_array = [];

foreach($explode as $k=>$v)
{
    $v[0] = trim($v[0]);

    $new_array[$v[0]] = $v;

    unset($new_array[$v[0]][0]);

    $new_array[$v[0]] = array_values($new_array[$v[0]]);
}

print_r($new_array);
这应该做到:


请在标记表html中显示可能的重复项?。非常感谢。
<?php
$string = 'Leader,Brian; Elder,Nina,Maria; Member,Duke,Rai,Mike';

$explode = array_map(function($v){return explode(',', $v);}, explode(';', $string));

$new_array = [];

foreach($explode as $k=>$v)
{
    $v[0] = trim($v[0]);

    $new_array[$v[0]] = $v;

    unset($new_array[$v[0]][0]);

    $new_array[$v[0]] = array_values($new_array[$v[0]]);
}

print_r($new_array);