Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (13)

Лучшие ответы пользователя

Все ответы (8)
  • Стоит ли учить Python после PHP?

    @a_ovchinnikov
    Web developer
    Конечно стоит!

    Когда работаете с одним языком и не смотрите вокруг, то очень быстро начинаете мыслить только в пределах этого самого языка. Тем более сейчас, когда все уходят от монолитных приложений в сторону сервисов, знание различных инструментов, их плюсов и минусов, может сыграть очень хорошую службу.
    Также изучение новых языков может открыть для вас новые способы решения той или иной задачи, которые вы потом с тем же успехом примените в том же PHP, например.

    Ну и чего скрывать, PHP заметно отстал в развитии от других языков и только сейчас в 7ой версии появляются какие-то фичи, которые в современном IT сообществе считаются стандартами де-факто.
    Ответ написан
    6 комментариев
  • PHP как правильно работать с JSON?

    @a_ovchinnikov
    Web developer
    Дело в том, что сейчас вы просто записываете в файл содержимое переменной $arr, которая всегда будет одинаковой, независимо от содержимого файла:

    fwrite($fp, json_encode($arr) );

    Правильный алгоритм таков:

    1. Получили содержимое файла;
    2. С помощью функции json_decode сделали из содержимого ассоциативный массив;
    3. Дописали новые данные в конец этого массива;
    4. С помощью функции json_encode из массива снова получили JSON-строку;
    5. Записали результат в файл.

    В целом структура вашего кода очень похожа на то, что я описал. Вероятно, ошибка вот где:

    if(isset($file)){
    $arr = array();
    }
    $arr[count($arr)+1]["name"] = $name;
    $arr[count($arr)]["email"] = $email;
    echo json_encode($arr);


    Вы создали пустой массив, а надо было проинициализировать его данными из файла. Также конструкция echo здесь ни к чему, если конечно только вы не используете ее в тестовых целях.

    Кстати, еще один лайфхак - вставку значения в конец массива можно сделать чуть проще:

    $arr[] = [
        'name' => $name,
        'email' => $email
    ];


    Оператор [] позволяет положить значение в конец массива. В данном случае мы кладем ассоциативный массив.
    Ответ написан
    Комментировать
  • Как заменить значение в многомерном массиве?

    @a_ovchinnikov
    Web developer
    Если я вас правильно понял, то что-то вроде этого:

    <?php
    
    $arr = [
        [
            'result' => 'a',
            'components' => [
                2,
                41
            ],
            'formula' => '2 + 41',
            'answer' => 43
        ],
        [
            'result' => 'd',
            'components' => [
                'a',
                1
            ],
            'formula' => 'a - 1',
            'answer' => ''
        ]
    ];
    
    $resultArr = doReplacement($arr);
    var_dump($resultArr);
    
    function doReplacement(array $arr)
    {
        foreach ($arr as &$item)
        {
            $components = &$item['components'];
            $formula = &$item['formula'];
            foreach ($components as &$component)
            {
                if (!is_numeric($component))
                {
                    $value = findComponentValue($arr, $component);
                    $formula = str_replace($component, $value, $formula);
    
                    $component = $value;
                }
            }
    
            if (empty($item['answer']))
            {
                // calculate formula
            }
        }
    
        return $arr;
    }
    
    function findComponentValue(array $arr, $component)
    {
        $value = 0;
        foreach ($arr as $item)
        {
            $result = $item['result'];
            if ($result == $component)
            {
                $value = intval($item['answer']);
            }
        }
    
        return $value;
    }


    Сам код подсчета формулы я писать не стал. Быстрое решение - с использованием eval, но это большое зло. По уму нужно парсить строку и вычислять значение. Возможно вот эта ссылочка сможет помочь stackoverflow.com/questions/18880772/calculate-mat...
    Ответ написан
    2 комментария
  • Можно ли в конструктор закладывать логику?

    @a_ovchinnikov
    Web developer
    Как правило конструктор выполняет подготовку объекта к его дальнейшему существованию. В вашем случае наличие такого вызова вполне уместно, т.к по сути это тоже элемент инициализации объекта.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (16)