如何使用 php 将 xml 子项添加到数组的第一个索引
How to add xml child to first index of an array using php
我有多个包含 mathml(xml) 元素的数组。
例如我的数组列表:
Array
(
[0] => <mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi> <mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>
[1] => <mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>
[2] => <mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>
[3] => <mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>
)
我希望所有数组都以 <mo>
开头,但如果它以 <mo>
开头,那么它就像数组 [3] 一样没问题。
例如我想要的预期输出
Array
(
[0] =><mo>+</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>
[1] =><mo>+</mo><mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>
[2] =><mo>+</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>
[3] =><mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>
)
如您所见,所有数组都以 <mo>
开头。
下面是我当前添加它的代码:
$ress = array();
$arr_result=[];
for ($i=0; $i <= $length ; $i++) {
$ress=$result[$i];
if ($pos = (substr($ress,0,3)!="<mo>")) {
$arr_result[]=array_unshift($ress, "<mo>+</mo>");
}
else{
$arr_result[]=$ress;
}
}
print_r($arr_result);
$result store the array.
你的代码有很多问题,所以我刚刚写了一些新的东西...
$result = ["<mo>+</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>",
"<mo>+</mo><mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>",
"<mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>",
"<mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>"
];
$arr_result=[];
for ($i=0; $i < count($result) ; $i++) {
if (substr($result[$i],0,4)!="<mo>") {
$arr_result[]= "<mo>+</mo>".$result[$i];
}
else {
$arr_result[]= $result[$i];
}
}
print_r($arr_result);
这只是一次遍历每一行,检查 <mo>
的前 4 个字符,如果不存在则将它们添加到新值中。
输出是...
Array
(
[0] => <mo>+</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>
[1] => <mo>+</mo><mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>
[2] => <mo>+</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>
[3] => <mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>
)
您可以尝试在 for 循环中执行类似的操作。 strpos 将 return 您要查找的字符串的位置,如果它确实存在于您正在搜索的字符串中。因此,在这种情况下,如果字符串以 "" 开头,它将 return 0.
$your_string = "<mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>";
$searching_tag = "<mo>";
$pos = strpos($your_string, $searching_tag);
if($pos === 0)
{
//string starts with "<mo>"
}
else
{
//string doesn't start with "<mo>"
}
我有多个包含 mathml(xml) 元素的数组。
例如我的数组列表:
Array
(
[0] => <mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi> <mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>
[1] => <mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>
[2] => <mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>
[3] => <mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>
)
我希望所有数组都以 <mo>
开头,但如果它以 <mo>
开头,那么它就像数组 [3] 一样没问题。
例如我想要的预期输出
Array
(
[0] =><mo>+</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>
[1] =><mo>+</mo><mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>
[2] =><mo>+</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>
[3] =><mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>
)
如您所见,所有数组都以 <mo>
开头。
下面是我当前添加它的代码:
$ress = array();
$arr_result=[];
for ($i=0; $i <= $length ; $i++) {
$ress=$result[$i];
if ($pos = (substr($ress,0,3)!="<mo>")) {
$arr_result[]=array_unshift($ress, "<mo>+</mo>");
}
else{
$arr_result[]=$ress;
}
}
print_r($arr_result);
$result store the array.
你的代码有很多问题,所以我刚刚写了一些新的东西...
$result = ["<mo>+</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>",
"<mo>+</mo><mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>",
"<mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>",
"<mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>"
];
$arr_result=[];
for ($i=0; $i < count($result) ; $i++) {
if (substr($result[$i],0,4)!="<mo>") {
$arr_result[]= "<mo>+</mo>".$result[$i];
}
else {
$arr_result[]= $result[$i];
}
}
print_r($arr_result);
这只是一次遍历每一行,检查 <mo>
的前 4 个字符,如果不存在则将它们添加到新值中。
输出是...
Array
(
[0] => <mo>+</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt><msup><mi>b</mi><mn>2</mn></msup><mo>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac>
[1] => <mo>+</mo><mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>
[2] => <mo>+</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mn>2</mn></mrow><mn>3</mn></mfrac><mo>-</mo><mn>3</mn><mo>=</mo><mn>2</mn>
[3] => <mo>-</mo><mn>3</mn><mo>+</mo><mn>2</mn><mo>=</mo><mi>x</mi>
)
您可以尝试在 for 循环中执行类似的操作。 strpos 将 return 您要查找的字符串的位置,如果它确实存在于您正在搜索的字符串中。因此,在这种情况下,如果字符串以 "" 开头,它将 return 0.
$your_string = "<mi>x</mi><mo>+</mo><mn>2</mn><mo>=</mo><mn>3</mn>";
$searching_tag = "<mo>";
$pos = strpos($your_string, $searching_tag);
if($pos === 0)
{
//string starts with "<mo>"
}
else
{
//string doesn't start with "<mo>"
}