を動作しません:
$equation = '-29x^3+1x^4-16x^1-9x^-1-6x^-3-6x^-4+2x^2-18-3x^6';
$result = '';
if (preg_match_all('~[+-]?\d*(?:x(?:\^([+-]?\d+))?)?~', $equation, $matches)) {
foreach ($matches[0] as $k=>$v)
if (substr($v, -1)=='x') $matches[1][$k] = 1;
arsort($matches[1]); // sort the keys by exponent values
foreach ($matches[1] as $k=>$v)
$result .= $matches[0][$k];
}
echo $result, PHP_EOL;
preg_split
使用
その他の方法:
を
$parts = preg_split('~\b(?=[-+])~', $equation);
if (!in_array(substr($parts[0], 0, 1), ['-','+'])) $parts[0] = '+' . $parts[0];
$assoc = [];
foreach ($parts as $v) {
$tmp = explode('^', $v);
if (isset($tmp[1])) $assoc[$v] = $tmp[1];
elseif (strpos($v, 'x')!==false) $assoc[$v] = 1;
else $assoc[$v] = '';
}
arsort($assoc);
$result = implode('', array_keys($assoc));
を使用すると、式の形式で完全にコントロールを持っていますか?例えば、 '-29x^3'の代わりに' 29x^3'があれば、どのように書かれますか?先頭の '+ '記号は明示的に追加されますか? – Arnauld
yes - 記号がprecenceでない場合、+記号が追加されます – juanpscotto