Здравствуйте, есть такой дырявый код (цикл в цикле)..
foreach($result as $r){
foreach($ids_time as $time){
if($r['id_time'] == $time['id']){
$row[] = $r;
}
}
}
Нужно более по простому сделать сравнение и вывести значения массива $result у которых идентичны значения с массивом $ids_time как это делает подобный код.
Массив $ids_time такого вида
[0] => Array
(
[id] => 93
[date] => 2017-03-31
)
А массив $result такого вида
[0] => Array
(
[id] => 22
[id_time] => 93
[id_client] => 69
)
Если идентификаторы id уникальны, то вернее будет обойти оба массива по одному разу. Например, проиндексируйте массив $ids_time, а затем смапте id_time из $result в соответствующие значения:
function arr_index($arr, $key) {
$result = [];
foreach ($arr as $item) {
if (isset($item[$key])) {
$result[$item[$key]] = $item;
}
}
return $result;
}
$indexed_time = arr_index($ids_time, 'id');
$row = array_map(function($item) use($indexed_time) {
return $indexed_time[$item['time_id']] ?? null;
}, $result);
Можно написать callback-функцию в array_uintersect
. Но зачем? Есть вещи, которые не стоит усложнять. К сожалению, в данном примере массив многомерный, и красивого способа сравнения нет, поэтому лучше оставить как есть.
Можно избавиться от вложенных циклов, если переписать код так:
$timesId = [];
foreach ($ids_time as $time) {
$timesId[$time['id']] = $time['id'];
}
foreach ($result as $r) {
if (!empty($timesId[$r['id_time']])) {
$row[] = $r;
}
}
Это немного упростит восприятие и сопровождение кода, но отъест памяти на временную переменную.
Если id
у времени - уникальное поле, то можно использовать его в качестве ключа в массиве и тогда останется только проверять наличие таких ключей - без временного массива и без вложенного цикла. Но для этого надо больше деталей о ваших данных, которыми вы оперируете. Так с ходу не сказать. Например, если они (данные) изначально лежали в базе, то может решить проблему можно ещё на этапе выборки, переписав запрос, и не мучиться потом с массивами в коде.
Необходимо загрузить изображение для Товаров в ВконтактеПолучаю адрес для загрузки методом https://vk
Не могу получить массив из строки, если перед скобками есть символы
Подскажите, как сделать так чтобы при загрузке аватарки (изображения) меньше 200x200 выбивало ошибку?
У меня появился вопрос, как сделать так, чтобы на странице категории подгружались подзаголовки, под которыми уже отображались конечные статьи?