Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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,我正在尝试从字符串中将等级(例如C5、C6)提取到另一个数组中。样本如下 String: $str = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6"; 我创建了以下函数来将上面的字符串分解成一个数组 function multiexplode($delimiters,$string) { $replace = str

我正在尝试从字符串中将等级(例如C5、C6)提取到另一个数组中。样本如下

String:

$str = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";
我创建了以下函数来将上面的字符串分解成一个数组

function multiexplode($delimiters,$string) {
    $replace = str_replace(' ', '', $string); // remove spaces between subjects
    $ready = str_replace($delimiters, $delimiters[0], $replace);
    $launch = explode($delimiters[0], $ready);
    return  $launch;
}
print_r(multiexplode(array(" ",",","-"),$str));
// This was the result
Array
(
    [0] => EnglishLanguage
    [1] => C5
    [2] => Mathematics
    [3] => C6
    [4] => Economics
    [5] => B3
    [6] => Biology
    [7] => C5
    [8] => Geography
    [9] => B2
    [10] => Yoruba
    [11] => B3
    [12] => AgriculturalScience
    [13] => C6
)

如何将等级(C6、B2…)唯一地提取到数组中。我希望有另一种方法来解决这个问题,或者在代码上做些什么来获得最佳解决方案。谢谢

您可以使用preg\u match\u all

$a = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";

preg_match_all('#-([BC]\d)#', $a, $res);

if (0 < count($res)) {
    unset($res[0]);
    $res = current($res);
}

print_r($res);
$a=“英语-C5、数学-C6、经济学-B3、生物学-C5、地理学-B2、约鲁巴-B3、农业科学-C6”;
preg#u match#u all('#-([BC]\d)#',$a,$res);
如果(0<计数($res)){
未设置($res[0]);
$res=当前($res);
}
印刷品(港币);;
输出:

数组(0=>'C5',1=>'C6',2=>'B3',3=>'C5',4=>'B2',5=>'B3',6=>'C6',)


您可以使用preg_match_all

$a = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";

preg_match_all('#-([BC]\d)#', $a, $res);

if (0 < count($res)) {
    unset($res[0]);
    $res = current($res);
}

print_r($res);
$a=“英语-C5、数学-C6、经济学-B3、生物学-C5、地理学-B2、约鲁巴-B3、农业科学-C6”;
preg#u match#u all('#-([BC]\d)#',$a,$res);
如果(0<计数($res)){
未设置($res[0]);
$res=当前($res);
}
印刷品(港币);;
输出:

数组(0=>'C5',1=>'C6',2=>'B3',3=>'C5',4=>'B2',5=>'B3',6=>'C6',)

您可以使用提取成绩值,将其链接到数组中的科目:

$str = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";

preg_match_all('/([^-,]+)-([^,]+)/', $str, $matches);
$grades = array_combine($matches[1], $matches[2]);
print_r($grades);
输出:

Array
(
    [English Language] => C5
    [Mathematics] => C6
    [Economics] => B3
    [Biology] => C5
    [Geography] => B2
    [Yoruba] => B3
    [Agricultural Science] => C6
)
Array
(
    [0] => C5
    [1] => C6
    [2] => B3
    [3] => C5
    [4] => B2
    [5] => B3
    [6] => C6
)
array (
  0 => 'C5',
  1 => 'C6',
  2 => 'B3',
  4 => 'B2',
)
如果您确实只需要这些值,请改用
$grades=$matches[2]

$grades = $matches[2];
print_r($grades);
输出:

Array
(
    [English Language] => C5
    [Mathematics] => C6
    [Economics] => B3
    [Biology] => C5
    [Geography] => B2
    [Yoruba] => B3
    [Agricultural Science] => C6
)
Array
(
    [0] => C5
    [1] => C6
    [2] => B3
    [3] => C5
    [4] => B2
    [5] => B3
    [6] => C6
)
array (
  0 => 'C5',
  1 => 'C6',
  2 => 'B3',
  4 => 'B2',
)

您可以使用提取成绩值,将其链接到数组中的科目:

$str = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";

preg_match_all('/([^-,]+)-([^,]+)/', $str, $matches);
$grades = array_combine($matches[1], $matches[2]);
print_r($grades);
输出:

Array
(
    [English Language] => C5
    [Mathematics] => C6
    [Economics] => B3
    [Biology] => C5
    [Geography] => B2
    [Yoruba] => B3
    [Agricultural Science] => C6
)
Array
(
    [0] => C5
    [1] => C6
    [2] => B3
    [3] => C5
    [4] => B2
    [5] => B3
    [6] => C6
)
array (
  0 => 'C5',
  1 => 'C6',
  2 => 'B3',
  4 => 'B2',
)
如果您确实只需要这些值,请改用
$grades=$matches[2]

$grades = $matches[2];
print_r($grades);
输出:

Array
(
    [English Language] => C5
    [Mathematics] => C6
    [Economics] => B3
    [Biology] => C5
    [Geography] => B2
    [Yoruba] => B3
    [Agricultural Science] => C6
)
Array
(
    [0] => C5
    [1] => C6
    [2] => B3
    [3] => C5
    [4] => B2
    [5] => B3
    [6] => C6
)
array (
  0 => 'C5',
  1 => 'C6',
  2 => 'B3',
  4 => 'B2',
)

我将字符串解析为CSV,然后在
-
上分解

<?php
$str = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";
foreach(str_getcsv($str) as $row){
    $values = explode('-', $row);
    $class[] = $values[0];
    $grades[] = $values[1];
}

我将字符串解析为CSV,然后在
-
s上爆炸

<?php
$str = "English Language-C5,Mathematics-C6,Economics-B3,Biology-C5,Geography-B2,Yoruba-B3,Agricultural Science-C6";
foreach(str_getcsv($str) as $row){
    $values = explode('-', $row);
    $class[] = $values[0];
    $grades[] = $values[1];
}
OP说:“如何将等级(C6、B2…)唯一地提取到一个数组中?”

假设要提取的子字符串总是以
B
C
(前面有连字符且字母后始终只有一个数字,请使用以下模式。
\K
意味着重新启动完整字符串匹配-这样做是为了简化输出数组并避免使用捕获组

代码:()

输出:

Array
(
    [English Language] => C5
    [Mathematics] => C6
    [Economics] => B3
    [Biology] => C5
    [Geography] => B2
    [Yoruba] => B3
    [Agricultural Science] => C6
)
Array
(
    [0] => C5
    [1] => C6
    [2] => B3
    [3] => C5
    [4] => B2
    [5] => B3
    [6] => C6
)
array (
  0 => 'C5',
  1 => 'C6',
  2 => 'B3',
  4 => 'B2',
)
我不知道是否需要按字母顺序排列或重新编制索引,所以我将保持原样。

OP说:“如何将等级(C6、B2…)唯一地提取到一个数组中?”

假设要提取的子字符串总是以
B
C
(前面有连字符且字母后始终只有一个数字,请使用以下模式。
\K
意味着重新启动完整字符串匹配-这样做是为了简化输出数组并避免使用捕获组

代码:()

输出:

Array
(
    [English Language] => C5
    [Mathematics] => C6
    [Economics] => B3
    [Biology] => C5
    [Geography] => B2
    [Yoruba] => B3
    [Agricultural Science] => C6
)
Array
(
    [0] => C5
    [1] => C6
    [2] => B3
    [3] => C5
    [4] => B2
    [5] => B3
    [6] => C6
)
array (
  0 => 'C5',
  1 => 'C6',
  2 => 'B3',
  4 => 'B2',
)

我不知道是否需要按字母顺序排列或重新编制索引,所以我将保持原样。

这很有效,但我会避免使用正则表达式,因为维护正则表达式会有一些开销,特别是在提供非正则表达式解决方案时,如#user3783243@ShaunakSontakke如果正则表达式有点复杂,我同意你的看法,但是这一点都不复杂。只需使用preg_match_,您就可以提取您所需的内容。这一点很好,但我会避免使用正则表达式,因为维护正则表达式有一些开销,特别是当您提到的非正则表达式解决方案可用时#user3783243@ShaunakSontakke如果正则表达式有点复杂,我同意你的看法,但它是n一点也不复杂。只需使用preg_match_,你就可以提取出你所需要的。是否有某个特定的人正在删除我所有被证明是正确的正则表达式解决方案?希望系统会嗅出这个人并禁止他们,因为对我有价值的贡献的这种行为会伤害堆栈溢出和研究人员。@Lewa,如果我的答案不正确的话如果您的问题不完全符合您的要求,请更新您的问题,以包含您的确切期望结果。Stack Overflow是一个旨在帮助数百万人的网站。要成为有用的资源,问题必须清晰,答案必须正确。编辑后,如果答案不是您想要的,我可以调整我的答案。是否有特定的人谁在删除我所有被证明是正确的正则表达式解决方案?希望系统能查出此人并禁止他们,因为对我的宝贵贡献采取的这一行动会伤害堆栈溢出和研究人员。@Lewa如果我的答案与您的要求不符,请更新您的问题,以包含您确切的期望结果。Stack Overflow是一个旨在帮助数百万人的网站。要成为有用的资源,问题必须清晰,答案必须正确。编辑后,如果我的答案不是你想要的,我可以调整我的答案。