За последние 24 часа нас посетили 73780 программистов и 10145 роботов. Сейчас ищут 2746 программистов ...

Применение функции к массиву.

Тема в разделе "PHP для новичков", создана пользователем Someda9, 5 июл 2017.

  1. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
    Добрый день столкнулся с проблемой. У меня есть .txt файл, в котором лежат строки с числами, в каждой строке по три числа, всего четыре строки. Я могу сделать из этого файла массив, после чего из каждой строки массива с тремя числами сделать массив, в котором три строки по одному числу. Получается четыре массива в массива. В чём же собственно вопрос. Как применить пользовательскую функцию к каждому из этих четырёх массивов в массиве, чтобы аргументами функции были была эта тройка чисел. То есть чтобы в каждом массиве в массиве были аргументы тех чисел, которые в них находятся.
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    лихо ты заворачиваешь. :)
    напиши плз пример полного массива и напиши, что и с какими элементами нужно делать.
     
  3. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
    Грубо говоря получается вот такой массив:

    Array
    (
    [0] => Array
    (
    [0] => 4
    [1] => 7
    [2] => 23

    )

    [1] => Array
    (
    [0] => 8
    [1] => 12
    [2] => 21

    )

    [2] => Array
    (
    [0] => 3
    [1] => 5
    [2] => 24
    )

    )

    А применить к нему необходимо следующее:

    function port($number1, $number2, $number3) {
    $s = "";
    for ($a = 1; $a <= $number3; $a++) {
    if (($a % $number1 == 0) && ($a % $number2 == 0)) {
    $s .= "FB ";
    } elseif ($a % $number1 == 0) {
    $s .= "F ";
    } elseif ($a % $number2 == 0) {
    $s .= "B ";
    } else {
    $s .= "$a ";
    }
    }
    return trim($s) . "\n";

    Вопрос состоит в том, как передать элементы каждого из массивов в аргументы функции.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    array_walk, array_map
     
  5. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну так напиши ещё одну функцию, в чём проблема?
    Код (Text):
    1.  
    2. array_walk($a, function ($e) { port($e[0], $e[1], $e[2]); });
     
  7. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
    Не мог бы ты объяснить по-подробней? Я только начал изучение данного языка, а раньше не имел дела с другими.
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Сейчас вроде каникулы не? Или это прогулявшие весь семестр отрабатывают?
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Погугли названия функций, а также "анонимные функции php" и "callable php"
     
  10. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
    Хах. Было бы печально, если бы всё было так. На самом деле просто пропустил прошлый урок своих курсов по PHP, поэтому пытаюсь понять, как сделать дз.)
     
  11. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    foreach вы скорее всего еще не проходили. Если так, то на будущее, имей в виду, что он для массивов лучше.
    Если я тебя правильно понял, то тебе нужно что-то такое:
    PHP:
    1. //$arr - это твой массив, а твоя функция описана где-то выше.
    2. for( $i = 1; $i < count( $arr ); $i++ ) {
    3. $res[] = port( $arr[$i][0], $arr[$i][1], $arr[$i][2] );
    4. } // В массив $res сложены значения, которые вернула твоя функция.
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    @TeslaFeo с цикла for следует вынести функцию count (), иначе перед каждым новым циклом, функция будет снова и снова подсчитывать кол-во элементов в массиве.
     
    TeslaFeo и alexblack нравится это.
  13. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
    Не подскажешь, как соединить этот массив

    <?php

    $s = file("D:\USR\LOL\OpenServer\srepts\lip.txt");
    function exort($s) {
    $s = explode(" ",$s);
    return $s;
    }


    $b = array_map("exort", $s);
    print_r($b);

    с этой функцией?

    function port($number1, $number2, $number3) {
    $s = "";
    for ($a = 1; $a <= $number3; $a++) {
    if (($a % $number1 == 0) && ($a % $number2 == 0)) {
    $s .= "FB ";
    } elseif ($a % $number1 == 0) {
    $s .= "F ";
    } elseif ($a % $number2 == 0) {
    $s .= "B ";
    } else {
    $s .= "$a ";
    }
    }
    return trim($s) . "\n";

    Никак понять не могу...
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Тебе тут уже подсказали несколько методов.
     
  15. Someda9

    Someda9 Новичок

    С нами с:
    5 июл 2017
    Сообщения:
    7
    Симпатии:
    0
    Мне нельзя использовать циклы, в этом смысл дз.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну так почитай то, что я тебе сказал. Мне ввести это за тебя в гугле? Подсказки тебе все дали, тут только за тебя решить. Я правда вообще не врубаюсь, что ты пытаешься получить в итоге
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    в функции exort вместо return $s написать:
    PHP:
    1. return port($s[0], $s[1], $s[2]);