Jump to content

ajuda array


ivobarbosa
 Share

Recommended Posts

Boas amigos, estou a tentar fazer uma coisa e não estou a conseguir, estou a fazer uma query em Joomla, e da query obtenho um array mutidemsional e quero eliminar arrays repetidos.

Tentei com array_unique mas não consegui.

neste momento tenho o seguinte código:

$db =& JFactory::getDBO();
$query2 = "
SELECT
groups_id,
groups_name,
groups_members
FROM #__docman_groups
	 WHERE
groups_id <> 0
AND groups_id <> 45
AND groups_id <> 46
ORDER BY
groups_id;";
$db->setQuery($query2);
$linhas = $db->loadAssocList();
$groups_members_s_repetidos = array_unique($linhas);
foreach($linhas as $linha) {
$groups_id = $linha['groups_id'];
$groups_name = $linha['groups_name'];
$groups_members = $linha['groups_members'];


//echo 'groups_id - '.$groups_id.'<br>';
//echo 'groups_name - '.$groups_name.'<br>';
//echo 'groups_members - '.$groups_members.'<br>';
}
//eliminar duplicados
print_r($groups_members_s_repetidos);


echo 'Conta = '.count($linhas).'<br>';

Alguem que perceba que me possa ajudar?

Obrigado.

Edited by ivobarbosa

Melhores Cumprimentos,

Ivo Barbosa

Link to comment
Share on other sites

usa a palavra reservada DISTINCT

SELECT DISTINCT groups_id, groups_name, groups_members
FROM #__docman_groups
WHERE groups_id <> 0
AND groups_id <> 45
AND groups_id <> 46
ORDER BY groups_id;

Isso já tinha testado amigo, mas não funciona.

Porque no ciclo foreach vou buscar a linha que quero e pelo indice do array.

por exemplo

foreach($linhas as $linha) {

$ID = $linha[0];
$Nome = $linha[1];
$GrupoIDS = $linha[2];
//echo 'Nome - '.$Nome.'<br>';
echo 'GrupoIDS - '.$GrupoIDS.'<br>';
}

e onde obtenho algo do genero:

GrupoIDS - 4139,4140,4144,4170,4187,4197,4224,4231,4407,4484,4507,4754,4765,4778,4814,4879,4881,4916,4945,5040,5116,5244,5282,5308
GrupoIDS - 4139,4140,4144,4167,4205,4343,4370,4504,4531,4533,4697,4795,4840,4923,5360
GrupoIDS - 4139,4140,4143,4144,4153,4198,4325,4373,4436,4437,4480,4515,4548,4709,4735,4802,4821,4830,4952,4980,5104,5184,5215,5252,5313
GrupoIDS - 4139,4140,4144,4160,4293,4301,4320,4381,4556,4692,4713,5493,4888,4971,5181,5362,5417
GrupoIDS - 4139,4140,4144,4147,4199,4202,4204,4230,4352,4479,4519,4559,4568,4619,4639,4761,4779,4781,4787,4801,4825,4835,4887,4993,5023,5031,5032,5034,5050,5091,5102,5129,5161,5175,5181,5182,5193,5205,5260,5288,5355,5372,5375
GrupoIDS - 4139,4140,4144,4145,4291,4430,4455,4482,4510,4539,4575,4600,4660,4691,4713,4837,4859,4874,4876,4938,4993,5063,5097,5135,5149,5179,5181,5193,5194,5225,5296
GrupoIDS - 4139,4140,4144,4169,4182,4206,4225,4414,4465,4477,4485,4499,4615,4628,4714,4762,4796,4803,4826,4885,4898,4932,4948,4970,5008,5071,5117,5253,5295,5341
GrupoIDS - 4139,4140,4144,4184,4256,4266,4278,4326,4383,4512,4527,4597,4699,4829,4832,4838,4848,4853,4901,4931,4957,4984,5003,5042,5100,5151,5229,5299,5305,5314,5323,5389
GrupoIDS - 4139,4140,4144,4213,4310,4401,4409,4469,4492,4632,4668,4715,4719,4720,4744,4831,4847,4885,5004,5010,5026,5090,5219,5237,5306,5368,5373,5397,5408
GrupoIDS - 4139,4140,4144,4244,4251,4293,4301,4399,4421,4425,4489,4627,4702,4711,4713,4880,4921,5088,5181
GrupoIDS - 4139,4140,4144,4155,4162,4240,4264,4269,4395,4410,4443,4447,4449,4451,4503,4586,4599,4635,4662,4717,4861,4905,4937,4963,4997,5043,5038,5080,5093,5153,5160,5286,5337,5377,5383
GrupoIDS - 4139,4140,4144,4183,4195,4213,4282,4308,4437,4548,4564,4586,4595,4630,4633,4851,4906,4952,4956,4985,5075,5084,5339
GrupoIDS - 4139,4140,4144,4185,4193,4242,4263,4319,4376,4434,4573,4586,4608,4611,4631,4649,4663,4897,4913,4929,4973,4977,5002,5307,5349,5353,5420,5120
GrupoIDS - 4139,4140,4144,4160,4178,4283,4298,4437,4556,4641,4715,4736,4811,4813,4991,5090,5121,5271,5322,5382
GrupoIDS - 4139,4140,4144,4250,4298,4312,4368,4405,4474,4486,4511,4665,4708,4759,4789,4824,4865,4969,5108,5137,5222
GrupoIDS - 4139,4140,4144,4194,4233,4246,4292,4313,4327,4331,4374,4391,4392,4442,4490,4493,4532,4549,4555,4626,4679,4749,4791,4975,4989,5031,5034,5050,5057,5146,5169,5171,5199,5200,5226,5300,5332,5354,5386
GrupoIDS - 4139,4140,4144,4170,4196,4211,4220,4284,4296,4344,4345,4420,4424,4435,4466,4501,4514,4621,4664,4738,4850,4903,4917,4919,4968,5113,5148,5176,5269,5302,5308,5359,5395
GrupoIDS - 4139,4140,4144,4175,4177,4189,4289,4362,4389,4459,4463,4561,4763,4822,4926,4981,4992,5127,5142,5167,5170,5251,5306,5382
GrupoIDS - 4139,4140,4144,4161,4201,4208,4245,4298,4359,4477,4574,4602,4731,4742,4813,4834,4839,4843,4878,4951,4991,5015,5072,5105,5166,5181,5224,5306,5324,5326,5403
GrupoIDS - 4139,4140,4144,5017,5077,5211,5283,5361,5374,5380,5387

e quero juntar esses ids todos numa unica string e eliminar os duplicados, por exemplo os os IDS 4139,4140 aparecem muitas vezes repetidos.

Percebeste?

Obrigado

Melhores Cumprimentos,

Ivo Barbosa

Link to comment
Share on other sites

mas que informação tens tu afinal no campo 'groups_id' ??

porque se for um campo único numérico o código que apresentas não dá esse output ...

é uma string com esses ids separados por virgula.

e como são varias linhas, tenho que fazer um clico para ir buscar todos os registos que a query dá, depois preciso de juntar esses registos todos numa só linha e apagar os repetidos.

Com esses ids vou pegar neles, e vou obter informação de cada utilizador que corresponde a um id desses.

percebes?

Melhores Cumprimentos,

Ivo Barbosa

Link to comment
Share on other sites

é uma string com esses ids separados por virgula.

ok, o que tens então é uma salgalhada ... ok.

e como são varias linhas, tenho que fazer um clico para ir buscar todos os registos que a query dá, depois preciso de juntar esses registos todos numa só linha e apagar os repetidos.

o melhor não é ter tudo numa string e retirar o repetidos, mas ter tudo num array.

deverás ter algo do genero

$linhas = array_unique(explode(',',implode(',', $linhas)));
// prontos ... tens na variavel $linhas os ids não repetidos ...

Com esses ids vou pegar neles, e vou obter informação de cada utilizador que corresponde a um id desses.

percebes?

nem quero saber ...

PS : notei agora que o array $linhas é multidimensional e so te interessa a terceira coluna

$linhas = array_unique(explode(',',array_reduce($linhas, function($result, $item) {
 if ($result != '')
   $result .= ',';
 return $result .= $item[3];
})));
// agora sim
Edited by HappyHippyHippo
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

ok, o que tens então é uma salgalhada ... ok.

o melhor não é ter tudo numa string e retirar o repetidos, mas ter tudo num array.

deverás ter algo do genero

$linhas = array_unique(explode(',',implode(',', $linhas)));
// prontos ... tens na variavel $linhas os ids não repetidos ...

nem quero saber ...

Acho que isto não vai funcionar, porque o $linhas já é um array onde o array tem varios campos.

Melhores Cumprimentos,

Ivo Barbosa

Link to comment
Share on other sites

é dois ...

$linhas = array_unique(explode(',',array_reduce($linhas, function($result, $item) {
 if ($result != '')
$result .= ',';
 return $result .= $item[2];
})));
// agora sim

Já não dá erro, contudo não percebi metade do que fizeste. Sou mesmo noob.

visto que o linhas ainda continua a ser um array, como posso fazer para pegar nesses ids todos para fazer um função para enviar mail por exemplo.

Sei fazer funções, mas n sei bem como pego o valor dos arrays, mete-me confusão os arrays, tenho que estudar melhor isso.

Melhores Cumprimentos,

Ivo Barbosa

Link to comment
Share on other sites

não tenho muito tempo para explicar exatamente o que fiz ...

ve na documentação

array_reduce

array_unique

explode

se mesmo depois disso não percebeste algum ponto então eu explico melhor

como posso fazer para pegar nesses ids todos para fazer um função para enviar mail por exemplo.

como a variavel $linhas tens os id's é só passar isso ara um foreach ...

foreach($linhas as $id) {
 // faz o que tens a fazer
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.