Итак, у меня есть массив, например, $ arr = «/ 43sdsd555ksldk66sd» 544fdfd «;
Я беру номера, используя preg_match_all '/\d+/'
, а также array_map('intval', $zni[0]);
Теперь проблема в том, что мне нужно обратить все эти целые, чтобы увидеть, являются ли они симметричными, например, 555 и 66, и получают ли они ИТОГО ИТОГО (всего только симметричные числа)
Я попытался использовать функцию «strrev» и получил симметричные числа, но я не знаю, как поместить их в одно место, ЕСЛИ ОНИ симметричны и вычислить их.
<?php
$numbers = "";
if (isset($_GET['submit']))
{
$numbers = ($_GET['niz']);
preg_match_all('/\d+/', $numbers, $zni);
$numtwo= array_map('intval', $zni[0]);
}
foreach ($numtwo as $num)
{
$reverse = strrev($num);
var_dump($reverse);
if ($num == $reverse)
{
$reverse = "true";
} else {
$reverse = "false";
}
var_dump($reverse);
}
Так как вы уже прошли большую часть пути и все, чего вам не хватало, в основном, это использовать +
или же +=
Вот простой пример того, как это сделать:
$input = "/43sdsd555ksldk66sd544fdfd";
$total = 0;
preg_match_all('/\d+/', $input, $m);
foreach ($m[0] as $d)
if ($d == strrev($d))
$total += $d;
var_dump($total); // => int(621)
С помощью intval()
не является необходимым, поскольку PHP будет неявно приводить между типами по мере необходимости.
В качестве альтернативы вы можете заменить цикл на PHP array_*
функции:
$input = "/43sdsd555ksldk66sd544fdfd";
preg_match_all('/\d+/', $input, $m);
$total = array_sum(array_filter($m[0], function ($v) { return $v == strrev($v); }));
var_dump($total); // => int(621)
Здесь мы используем анонимную функцию с array_filter()
создать новый массив, который содержит только числа палиндрома из исходных совпадений, которые затем передаются array_sum()
.
Поэтому все, что нужно для преобразования исходного кода в рабочий пример, это ввести переменную и подвести итог:
<?php
$numbers = "";
if (isset($_GET['submit']))
{
$numbers = ($_GET['niz']);
preg_match_all('/\d+/', $numbers, $zni);
$numtwo= array_map('intval', $zni[0]);
}
$total = 0; // new variable
foreach ($numtwo as $num)
{
$reverse = strrev($num);
var_dump($reverse);
if ($num == $reverse)
{
$reverse = "true";
$total += $num; // sum up
} else {
$reverse = "false";
}
var_dump($reverse);
}
var_dump($total); // => int(621)
Других решений пока нет …