LINUX.ORG.RU

Помоги с переводом с Perl'a на PHP


0

0

Дан кусок кода :

$pos{$pos}++; if ($base_pos < 3) { my %hash_forms = (); map {$hash_forms{substr(substr($word,0,$base_pos).$_,0,3)}++} split /\|/, substr($profiles[unpack("n",$profile_num)],1);

вот перевод последнего 'map' на PHP никак не дается.....

anonymous

map же просто цикл

anonymous
()
Ответ на: комментарий от anonymous

>Народ ну простите тупого приведите код на PHP ? накак не сообразить!!!!

1. Сделай нормальное форматирование кода.

2. Объясни, что именно тебе не понятно.

3. Рассчитывай не на то, что работу сделают за тебя, а на то, что тебе подскажут, в каком направлении рыть.

Davidov ★★★★
()
Ответ на: комментарий от Davidov

$pos{$pos}++;

if ($base_pos < 3) {

my %hash_forms = ();

map {$hash_forms{substr(substr($word,0,$base_pos).$_,0,3)}++} split /\|/, substr($profiles[unpack("n",$profile_num)],1);


Итак вопросы... 1) $_ относятся к $pos{$pos}++; или к чему?
2) не могу понять последовательность. Сначала map, который что делает??? увеличивает некоторое значение в хеше?, потом split как я понял он режет на разделенные | следующий substr??? тогда не вижу взаимосвязи этого с map'ом?

anonymous
()
Ответ на: комментарий от anonymous

Сразу оговорюсь, что я не специалист по perl.

1. $_ - это что-то вроде "переменной по умолчанию". В данном контексте, это текущий элемент для функции map. http://search.cpan.org/dist/perl/pod/perlvar.pod

2. map выполняет определённую операцию с каждым элементом списка. первый аргумент - выражение (которое вычисляется), второй - список. map возвращает список из результатов выполнения выражения с каждым элементом списка. http://search.cpan.org/dist/perl/pod/perlfunc.pod

В языке php для этих целей можно использовать цикл.

Davidov ★★★★
()
Ответ на: комментарий от anonymous

map {$hash_forms{substr(substr($word,0,$base_pos).$_,0,3)}++}
split /\|/, substr($profiles[unpack("n",$profile_num)],1);

этот код эквивалентен такому коду

my @m = split /\|/, substr($profiles[unpack("n",$profile_num)],1);

foreach (@m){
$hash_forms{substr(substr($word,0,$base_pos).$_,0,3)}++;
}





vilfred ☆☆
()
Ответ на: комментарий от anonymous

> 2) не могу понять последовательность. Сначала map, который что делает??? 
> увеличивает некоторое значение в хеше?, потом split как я понял он 
> режет на разделенные | следующий substr??? 
> тогда не вижу взаимосвязи этого с map'ом?

Не так. map - это функция, которая принимает два параметра: замыкание,  
которое увеличивает счетчик в хеше, и список, для каждого из элементов
которого будет вызвано замыкание.

т.е. 

map {$hash_forms{substr(substr($word,0,$base_pos).$_,0,3)}++} split /\|/, substr($profiles[unpack("n",$profile_num)],1);

это

map(
  sub {$hash_forms{substr(substr($word,0,$base_pos).$_,0,3)}++},    
  split(
    /\|/, 
    substr($profiles[unpack("n",$profile_num)],1)
  )
);

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.