Я пытаюсь получить набор перестановок на основе строки. Тем не менее, я не мог выполнить функцию правильно. Я не очень хорошо разбираюсь в public static, private или в том, как мне вызывать функцию.
<?php namespace Helpers;
class Helper {
public static function permute($str,$i,$n)
{
if ($i == $n)
return "$str\n";
else {
for ($j = $i; $j < $n; $j++) {
swap($str,$i,$j);
permute($str, $i+1, $n);
swap($str,$i,$j); // backtrack.
}
}
}
public static function swap(&$str,$i,$j) {
$temp = $str[$i];
$str[$i] = $str[$j];
$str[$j] = $temp;
}}
Вот как я вызываю функцию из моего контроллера.
Helper::permute($str,0,strlen($str))
Я получаю эту ошибку:
Вызов неопределенной функции Helpers \ swap ()
Вы вызываете метод swap()
а также permute()
из статического контекста, но обрабатывать их, как если бы они были нестатичными.
Попробуйте изменить его следующим образом:
public static function permute($str,$i,$n)
{
if ($i == $n)
return "$str\n";
else {
for ($j = $i; $j < $n; $j++) {
self::swap($str,$i,$j);
self::permute($str, $i+1, $n);
self::swap($str,$i,$j); // backtrack.
}
}
}
Других решений пока нет …