• Как исправить json плагина REST для терминов таксономии?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё элементарно. В PHP любой массив - ассоциативный, что соответствует объекту JSON.
    Но, если индекс массива начинается с нуля и содержит только строго последовательные номера (0, 1, 2, 3 и т.д.), то для простоты он представляется как классический массив, в том числе и в JSON.
    print json_encode(['a', 'b']); // ["a","b"]
    print json_encode([0 => 'a', 1 => 'b']); // ["a","b"]
    print json_encode([1 => 'a', 2 => 'b']); // {"1":"a","2":"b"}
    У вас массив заполняется по индексам $term->tid, которые не образуют классической последовательности, поэтому и представляются объектом.
    Ваш код можно переписать так:
    $vid = 'digest';
    $termDataAll = array_map(
        fn($term) => [
            'tid' => $term->tid,
            'name' => $term->name,
            'weight' => $term->weight,
            'childs' => array_map(
                fn($child) => [
                    'tid' => $child->tid,
                    'name' => $child->name,
                    'weight' => $child->weight
                ],
                \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term->tid, 1)
            )
        ],
        \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, 0, 1)
    );

    В результате должен получиться такой JSON
    [
      [
        "tid": "11",
        "name": "parent-1",
        "weight": "7",
        "childs": [
          ["tid": "14", "name": "child-1", "weight": "0"],
          ["tid": "19", "name": "child-2", "weight": "1"],
        ],
      ], [
        "tid": "12",
        "name": "parent-2",
        "weight": "6",
        "childs": [
          ["tid": "17", "name": "child-1", "weight": "0"],
          ["tid": "18", "name": "child-2", "weight": "1"]
        ]
      ]
    ]
    Ответ написан
    1 комментарий
  • Как сделать плавное изменение яркости ШИМ?

    jcmvbkbc
    @jcmvbkbc
    http://dilbert.com/strip/1998-08-24
    хочется чтобы лента плавно изменяла яркость

    для этого нужно менять скважность ШИМ не один раз скачком от текущего значения к целевому, а постепенно, за несколько шагов. С постоянной скоростью -- примерно так:
    void set_pwm_smooth(int new_pwm)
    {
        static const int pwm_step = ...; // шаг изменения ШИМ
        static const int pwm_step_time = ...; // время одного шага изменения ШИМ
        static int old_pwm;
        int pwm = old_pwm;
    
        while (pwm != new_pwm) {
            int next_pwm = pwm + (pwm < new_pwm ? pwm_step : -pwm_step);
            if ((pwm < new_pwm && next_pwm > new_pwm) ||
                (pwm > new_pwm && next_pwm < new_pwm))
                pwm = new_pwm;
            else
                pwm = next_pwm;
            analogWrite(LEDPIN, pwm);
            delay(pwm_step_time);
        }
        old_pwm = new_pwm;
    }
    Ответ написан