@php_xak

Обледенение двух массива данных, как сделать?

Есть БД с id пользователей с отправкой и есть api с информаций. Эти две вещее нужно объединить.
Сейчас это реализовано так:
while ($row = mysqli_fetch_assoc($result)) {
$kol_grop++;
$name_grop .= $row['name'].',';
array_push($array_nama_g, array('name'=>$row['name'], 'subscriber_bes'=>$row['subscriber_bes']));
}
//api 
$res_raspi = array(array('name_grop'=>158, 'subscriber_bes'=>'125588,87156978,899'), array('name_grop'=>668, 'subscriber_bes'=>'188,8799'));
for ($i=0; $i < $kol_grop; $i++) {
$fed_key_array = array_search($res_raspi[$i]['name_grop'], array_column($array_nama_g, 'name'));
$users_id = $array_nama_g[$fed_key_array]['subscriber_bes'];
}

Работает через раз...

Как сделать это правильно?
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Обледенение Эти две вещее

Сначала они гордо заявляют "мы же не на диктанте!" - а потом этой же жопой пишут код...
$imps = [];
while ($row = mysqli_fetch_assoc($result)) {
	$imps[$row['name']] = $row['subscriber_bes'];
}
$name_grop = implode(',', array_keys($imps));
//api 
$res_raspi = array(
	array(
		'name_grop' => 158, 
		'subscriber_bes' => '125588,87156978,899'
	), 
	array(
		'name_grop' => 668,
		'subscriber_bes' => '188,8799'
	)
);
foreach ($res_raspi as $rr) {
	$users_id = $imps[$rr['name_grop']];
}

Сосчитал одно, пошел циклом по другому. "Работает через раз", видите ли...
Ответ написан
Комментировать
Lastor
@Lastor
В чем сила, брат? В ньютонах.
// $row->name выглядит опрятнее, чем $row['name']
// Для этого превращаем массив в объект. (object)
while ($row = (object) mysqli_fetch_assoc($result)) {

    //$kol_grop++; Это не нужно

    // $name_grop .= $row['name'] . ',';
    // Не следует использовать конкатенацию в цикле.
    // Лучше собрать в массив и склеить в implode после цикла.


    // array_push($array_nama_g, array('name'=>$row['name'], 'subscriber_bes'=>$row['subscriber_bes']));
    // Это можно выразить иначе:
    // 'name' кладем в ключ, 'subscriber_bes' в значение
    $array_nama_g[$row->name] = $row->subscriber_bes;

}

// $name_grop .= $row['name'] . ','; <-- это было в цикле while
// Вместо этого берём ключи из $array_nama_g и клеим в строку:
$name_grop = implode(',', array_keys($array_nama_g));
// А вообще я так и не понял зачем нужна эта переменная.
// Да еще совпадающая с именем ключа в res_raspi. Очень запутывает.

//api
// Вместо array() можно использовать []
$res_raspi = [
    ['name_grop'      => 158,
     'subscriber_bes' => '125588,87156978,899'],

    ['name_grop'      => 668,
     'subscriber_bes' => '188,8799']
];

/*
for ($i = 0; $i < $kol_grop; $i++) {
    $fed_key_array = array_search($res_raspi[$i]['name_grop'], array_column($array_nama_g, 'name'));
    $users_id = $array_nama_g[$fed_key_array]['subscriber_bes'];
    // $users_id будет перезаписываться каждую итерацию цикла.
    // Или планируется его применить до наступления следующей?
}
*/

// Записываем это более понятным образом
foreach ($res_raspi as $rapi) {
    $users_id = $array_nama_g[$rapi['name_grop']];
}


убираем комментарии
while ($row = (object) mysqli_fetch_assoc($result)) {
    $array_nama_g[$row->name] = $row->subscriber_bes;
}
$name_grop = implode(',', array_keys($array_nama_g));

$res_raspi = [
    ['name_grop'      => 158,
     'subscriber_bes' => '125588,87156978,899'],
    
    ['name_grop'      => 668,
     'subscriber_bes' => '188,8799']
];
foreach ($res_raspi as $rapi) {
    $users_id = $array_nama_g[$rapi['name_grop']];
}

Это в более цивилизованно выглядит, но работает так же.
Чтобы что-то исправить надо задачу понимать.
Что с чем нужно объединить?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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