在PHP中使用字符进行分组

在PHP中使用字符进行分组,php,arrays,Php,Arrays,我有这样一个数组: array{ 0 => string 'B.E - ECE', 1 => string 'B.E - EEE', 2 => string 'Msc - Maths', 3 => string 'Msc - Social', } 那么,如何将数组分成以下组: B.E. => ECE, EEE Msc => Maths,Social ? 我想用PHP来做。有谁能帮我实现它吗?那么你的数组是由“

我有这样一个数组:

    array{
     0 => string 'B.E - ECE',
     1 => string 'B.E - EEE',
     2 => string 'Msc - Maths',
     3 => string 'Msc - Social',
}
那么,如何将数组分成以下组:

B.E. => ECE, EEE
Msc => Maths,Social
?


我想用PHP来做。有谁能帮我实现它吗?

那么你的数组是由“-”字符分割的吗

所以它是由逗号分割的
-

好——

(编辑:删除部分以澄清答案)

在对话和问题的重新安排之后,第二次尝试解决方案,根据上述假设,尝试以下方法:

$array = array {
     0 => string 'B.E - ECE' (length=9)
     1 => string 'B.E - EEE' (length=9)
     2 => string 'Msc - Maths' (length=11)
     3 => string 'Msc - Social' (length=12)
}


foreach ($array as $row){
$piece = explode("-",$row);
$key = $piece[0];
$newArray[$key][] = $piece[1];
unset($piece);
}
unset($row) ///tidy up
这将输出两个阵列,每个阵列有两个:

$newArray[Msc] = array("Maths","Social");
$newArray[B.E] = array("ECE","EEE");
我所做的是,如果键与
$newArray[$key][]
一起存在,则Foreach循环会自动添加到数组中,这样,值会自动按键收集,并且键被定义为原始数组值的前半部分

印刷: 要打印结果,请执行以下操作:

foreach($newArray as $key=>$newRow){
/// there are two rows in this case, [B.E] and [MSc]
print $key.":<br>";
print "<pre>";
///<pre> HTML tag makes output use linebreaks and spaces. neater.
print_r($newRow);
///alternatively use var_dump($newRow);
print "</pre>";
}

它将打印该数组中的所有数据。print\u r非常有用。

您需要的是php的explode。不确定这是否会给你一个完美的答案,但应该让你知道下一步该怎么做

这将为您提供一个名为
$groupedArray
的完整格式数组,其中$array是您已经拥有的数组


希望这有帮助

显示实际数组的转储,而不仅仅是一个字符串,否则很难想象你在说什么给出你的数组结构。。。。!这样我们才能帮忙you@WinterBash这就是我写的字符串question@MarkBaker我将输入一个字符串,并以数组形式输出groups@MarkBaker根据你的要求,我给出了一个数组…现在我们可以像B.E&Msc etcI那样对它进行分组,我给出了字符串…在转储时,它将作为我在问题中显示的数组出现。现在我需要按B.E,Msc etcHow对其进行分组。我可以打印这些值吗?请告诉我好吗?我真的建议通过PHP.net和谷歌做一些基础的PHP研究。但要打印值,请使用foreach循环,并打印所需内容。Foreach是处理数组的最好朋友。好的,我会继续,但我是PHP新手,所以我问过你。实际上,我需要打印B.E.及其元素。在我们应该用逗号分解之前,请你指导我,如果它是一个数组,正如你所说的,那么你不需要用逗号分解。您对此线程的评论至少给我带来了更多的困惑,而不是清晰。请看,我在dump中给出了一个字符串,我得到了我所写的有问题的数组…我将您的解决方案应用到该数组中,它将为空。您至少可以对我在中显示的数组进行分组吗question@RIADev我不需要用逗号来分解,因为已经给出了一个数组。正如我所说,这可能不是一个完美的答案,但应该会有所帮助。
print_r($newArray['B.E']);
$groupedArray = array();
foreach($array as $row){
    $split = explode(" - ",$row);
    $groupedArray[] = $split[0];
}
array_unique($groupedArray); //This will give you the two groupings

foreach($array as $row){
    $split = explode(" - ",$row);
    $pos = array_search($split[0],$groupedArray);
    if($pos !== FALSE){
        $groupedArray[$pos][] = $split[1];
    }
}