Сравнение дат из массива с многомерным массивом [duplicate]

Панель инструментов Query Design доступна только при выполнении следующих действий:

  • Объект правой кнопки мыши (например, таблица)
  • Выберите «Edit Top 200 Rows»
  • Панель инструментов конструктора запросов включена
0
задан Peter 31 March 2013 в 22:32
поделиться

4 ответа

Во-первых, я бы перевернул массив $nomal, чтобы получить постоянное время поиска в массиве, например:

$normal = array_flip( $normal);

. Затем вам нужно отфильтровать $multidimensional_array на $normal с простым поиском:

$filtered = array_filter( $multidimensional_array, function( $el) use( $normal) {
    return isset( $normal[ $el['member_id'] ]);
});
3
ответ дан nickb 16 August 2018 в 11:11
поделиться
  • 1
    Dayum, идентичное решение ...: D – deceze♦ 31 March 2013 в 22:40
  • 2
    Это довольно забавно ... Похоже на хорошее решение для меня :) – nickb 31 March 2013 в 22:41
  • 3
    Вы, ребята, писали одно и то же решение одновременно. Спасибо вам обоим. К сожалению, я должен выбрать только один ответ, поэтому, если вы можете получить взаимное согласие, было бы неплохо :) – Peter 31 March 2013 в 22:52
$normalArray = array_flip($normalArray);

$multiDimArray = array_filter($multiDimArray, function ($elem) use ($normalArray) {
    return isset($normalArray[$elem['memberid']]);
});

Требуется ровно две итерации, по одному над каждым массивом. Ключевые поиски с использованием $normalArray[$elem['memberId']] невероятно быстры. Может иметь некоторые издержки памяти из-за функционального характера и копий массивов, используйте традиционный цикл и unset, если это проблема.

4
ответ дан deceze 16 August 2018 в 11:11
поделиться

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

Мы не знаем, как выглядит запрос, который вы используете, но что-то по этим строкам сделало бы это:

// The ids from the file
$use_ids = array(131, 141, 191, 205);

// Create a list for the IN clause
$ids = '(' . implode(',', $use_ids) . ')';

// Create the query
$query = <<< SQL
    SELECT time, memberid
    FROM some_table
    WHERE ...
        AND memberid IN {$ids}
    ORDER BY time
SQL;

// Execute the query, etc.

Это всегда хорошая идея, чтобы позволить SQL обрабатывать как можно большую фильтрацию содержимого.

0
ответ дан Sverri M. Olsen 16 August 2018 в 11:11
поделиться

На данный момент у нас нет доступа к ресурсам разработки, но это должно работать.

foreach($members as $member => $property) {
    if (!in_array($property['member_id'], $id_array)) {
        unset($members[$member]);
    }
}

$id_array - это одномерная матрица (массив), которую вы задали в своем вопросе .

1
ответ дан user 16 August 2018 в 11:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: