Картирование массива в новый массив

У меня есть массив, в котором есть массив в нем, и я хочу создать новый массив для каждого из значений выбора "власть". Что это лучший способ, чтобы сделать это?

Исходный массив:

Array
(
    [0] => Array
        (
            [date] => 2019-09-16 15:16:03
            [stid] => 64
            [beam] => 1
            [power] => {1,3,7,8,9}
            [gates] => 5
)

   [1] => Array
        (
            [date] => 2019-09-16 15:17:03
            [stid] => 64
            [beam] => 1
            [power] => {14,15,16}
            [gates] => 3
)
)

Редактировать: массив выход должен увеличиться, ворота начали с 1

Array
(
    [0] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 1
            [power] => 1
        )

   [1] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 2
            [power] => 3
         )

   [2] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 3
            [power] => 7
         )

   [3] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 4
            [power] => 8
         )


   [4] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 5
            [power] => 9
         )

   [5] => Array
        (
            [date] => 2019-09-16 15:17:03
            [gate] => 1
            [power] => 14
         )

   [6] => Array
        (
            [date] => 2019-09-16 15:17:03
            [gate] => 2
            [power] => 15
         )

   [7] => Array
        (
            [date] => 2019-09-16 15:17:03
            [gate] => 3
            [power] => 16
         )
)

Продолжение для всех 8 (5 и 3) значения мощности, такой, что результирующий массив является массивом из 8 массивов.

0
2019-09-17 21:31:07
источник
2 ответа

Написать метод в классе MyClass, который проверяет, если оба условия выполняются и назвать это methiod в оба слота. Сделать условия членам класса MyClass

bool MyClass::areBothConditionsTrue() {
    if(m_conditionA && m_conditionB)
        return true:
    return false;
}

void MyClass::handleReady()
{
    qDebug() << "Ready to do next step";
    m_conditionA = true;
    bool b = areBothConditionsTrue();
}

void MyClass::handleEnabledChange(const bool enabled)
{
    qDebug() << "Is member enabled?" << enabled;
    m_conditionB = enabled;
    bool b = areBothConditionsTrue();
}

Дальнейший код не зависит от того, что вы хотите делать с этой информацией

+1
2019-09-17 22:20:02

Я не имею достаточно репутации, чтобы комментировать RoQuOTriX ответа , поэтому сделал отдельно.

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

void MyClass::handleReady(State& state)
{
    qDebug() << "Ready to do next step";
    state.m_conditionA.setFlag(true);
}

...но тогда вам придется выполнить класса и держатель условиях по класс, унаследованный от , чтобы излучать сигнал с для называется. Тогда просто connect(m_conditionA, &Condition::flagChanged, this, &State::checkAllConditions) и хранить все условия в некоторых ассоциативный контейнер.

+1
2019-09-17 22:20:02

Посмотрите другие вопросы по меткам