Flatten array
Olá pessoal,
Esotu com um pequeno "bug" ou algo mal codado que há situações onde meu array cria indices e há momentos que ele não cria indices...
Vejam o código:
//implode de ids vindo de multiple select agrupados em json
$idGrupo = implode(",",$x['grupo']);
//Consulto no BD todos os detalhes do grupo selecionado
$queryGrupo = "SELECT ddi,id FROM bookgroup WHERE user_id='{$userID}' and id IN ($idGrupo)";
$sqlGrupo = mysqli_query($connect_sql,$queryGrupo);
$grupo = [];
//fetch todos os grupos selecionados com id e ddi num novo array para reutilizare
while($bdd = mysqli_fetch_assoc($sqlGrupo)){
$grupo[] = [
"id" => $bdd['id'],
"ddi" => $bdd['ddi']
];
}
//implode de todos os IDs agrupados num json de checkboxes selecionados pelo usuario
$idContato = implode(",",$x['ids']);
//Consulto dados dos contatos e os agrupo num array para reutilizar
$queryContato = "SELECT ddi,id,group_id FROM phonebook WHERE user_id='{$userID}' and id IN ($idContato)";
$sqlContato = mysqli_query($connect_sql,$queryContato);
$contato = [];
//fetch os contatos selecionados e checa se o ddi do grupo é idem ao ddi do contato
while($bdd = mysqli_fetch_assoc($sqlContato)){
//array com os grupos existentes no contato
$contato['oldGroup'][$bdd['id']] = ((json_decode($bdd['group_id'],true) == null) ? [] : json_decode($bdd['group_id'],true));
//fetch e agrupo os grupos por contato
foreach($grupo as $grp){
if($grp['ddi'] == $bdd['ddi']){
$contato['newGroup'][] = [
"grupoID" => $grp['id'],
"cttID" => $bdd['id']
];
}
}
}
//Agrupo loop com base no ID do contato
$agrupaContato = [];
foreach ($contato['newGroup'] as $key => $element) {
$agrupaContato[$element['cttID']][] = $element['grupoID'];
}
//Agrupo o loop vom base no ID e monto nova chave de grupos mantendo os já existentes
foreach($agrupaContato as $key => $value){
//checo se grupo não pertence
if(!in_array($value, $contato['oldGroup'][$key])){
$novoGrupo[$key] = array_merge($value,$contato['oldGroup'][$key]);
$novoGrupo[$key] = array_unique($novoGrupo[$key]);
//se não pertencer, mantenho grupo de array intacto
}else{
$novoGrupo[$key] = $contato['oldGroup'];
}
}
//Salvo o novo conjunto de array em json no banco de dados dos grupos selecionados ao contato
foreach($novoGrupo as $key => $teste){
$listaGrupos[$key] = json_encode($novoGrupo[$key]);
$queryUpdate = "UPDATE phonebook SET
group_id = '{$listaGrupos[$key]}'
WHERE user_id='{$userID}' and id='{$key}'";
$sqlUpdate = mysqli_query($connect_sql,$queryUpdate);
}
echo mysqli_error($connect_sql);
echo json_encode($sqlUpdate);
Vamos supor que um contato é selecionado e nele tem salvo o json de grupos
["1","3","5"]
O que meu código faz é identificar se o grupo selecionado faz parte deste json, se não fizer o adiciona e se fizer não o adiciona mantendo o objeto intacto
Quando eu seleciono todos os grupos já existentes no contato, o json é salvo no formato que pretendo, que é:
["1","3","5"]
Agora, se eu seleciono apenas um ou dois grupos, mas não todos dos já existentes no contato, o array de grupos é salvo como
{0:1,1:3,2:5}
Ou seja, errado porque não quero que salve com indices.
Como posso ajustar esse código para que eu sempre consiga salvar o array limpo sem indices?
Discussão (1)
Carregando comentários...