Как добавить дочерний xml в первый индекс массива с помощью php - PullRequest
0 голосов
/ 25 мая 2018

У меня есть несколько массивов, содержащих элементы 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. 

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы можете попытаться сделать что-то подобное в цикле for.strpos вернет позицию искомой строки, если она существует в искомой строке. Таким образом, в этом случае, если строка начинается с "", она вернет 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>"
}
0 голосов
/ 25 мая 2018

Есть много проблем с кодом, который у вас есть, поэтому я просто написал что-то новое ...

$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);

Это просто проходит каждую строку за раз, проверяя первые 4 символадля <mo> и добавляет их в новое значение, если его там нет.

Вывод ...

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>
)
...