Dúvida com Array

Pessoal, tenho um problema que não consigo resolver…
Eu tenho uma SQL com que ao pegar todos os dados de uma tabela, eu crio um Array com as informações armazenadas, bem simples para enviar por JSON

Array
(
    [totalDePerguntas] => 2
    [dados] => Array
        (
            [0] => Array
                (
                    [id] => 16
                    [pergunta] => Quem criou o telescópio?
                    [quem_respondeu] => renato
                    [reposta] => Hans Lippershey
                )

            [1] => Array
                (
                    [id] => 16
                    [pergunta] => Quem descobriu o brasil
                    [quem_respondeu] => renato
                    [reposta] => Hans Lippershey

        )

)

Para cada pergunta, é possível criar comentários, tenho uma SQL que conta o número de comentários para cada resposta, o problema é que, no Array dos dados eu não sei como adicionar um índice para armazenar o números de comentários

Gostaria que ficasse assim para todas as respostas

[id] => 16
[pergunta] => Quem descobriu o brasil
[quem_respondeu] => renato
[reposta] => Hans Lippershey
[comentarios] => 12

Gostaria de incluir esse índice com PHP antes de encodificar e enviar por JSON, tem como em PHP? Dá pra fazer comARRAY_PUSH? Há outras maneiras de incluir [comentarios] => 12?

Depende:

Um exemplo:

<?php
 
$array = array(
		'totalDePerguntas' => 2,
		'dados' => array(
				array(
					'id' => 16,
                    'pergunta' => 'Quem criou o telescópio?',
                    'quem_respondeu' => 'renato',
                    'reposta' => 'Hans Lippershey',
                ),
                array(
					'id' => 17,
                    'pergunta' => 'Quem descobriu o brasil?',
                    'quem_respondeu' => 'renato',
                    'reposta' => 'Hans Lippershey',
                )
			)
	);
 
$comentarios = array(
		17 => 2,
		16 => 4
	);    
 
for($i = 0 ; $i < count($array['dados']); $i++)
{
	$array['dados'][$i]['comentarios'] = 
	          isset($comentarios[$array['dados'][$i]['id']]) 
	          ? $comentarios[$array['dados'][$i]['id']]
	          : 0;
}
 
print_r($array);	

Exemplo IDEONE proposto

Ou seja, você passou um array primário e o outro você não passou como ele é, e outra como posso identificar que cada comentário é de uma determinada pergunta? (precisa informar todos os pontos possíveis, os dois arrays e qual elemento liga os dois arrays)

Eu realmente não fui muito claro…
Como posso identificar que cada comentário é de uma determinada pergunta?

Dentro do “Array dados” minha de intenção de adicionar o índice Comentários, que NÃO faz parte dos dados que eu coleto da Tabela SQL, depois de adicionado, adicionar o valor dele sendo o número de comentários conditos naquela resposta com o MYSQLI_NUM_ROWS, como eu conto esses comentários?

Nesse caso eu faço assim, na minha tabela SQL, eu pego o primeiro ID da pergunta e adiciono ele a outro campo da tabela chamado de OSID (Old Status ID) e complemento com outro campo, O “type” que eu defino como B, para comentários, assim eu não preciso criar uma coluna na tabela apenas para armazenar e contar o número de comentários, o Type = b me permite esse filtro, deu pra entender minha lógica?
type A = Perguntas e type B = Comentários

Eu faço um select assim:
SELECT resposta FROM tabela_de_perguntas WHERE type='b' AND OSID = '$id' ORDER BY ASC

Ai queria adicionar o índice Comentários no Array antes de fazer o JSON_ENCODE para poder trabalha-lo com JavaScript

$array = array(
		'totalDePerguntas' => 2,
		'dados' => array(
				array(
//Array com índices da tabela SQL
		    'id' => 16,
                    'pergunta' => 'Quem descobriu o Brasil?',
                    'quem_respondeu' => 'renato',
                    'reposta' => 'Pedro Alvares Cabral',
//Índice adicionado ao Array com PHP recebendo o num_rows do type b
                    'comentários=> '3'
                )

Deu pra entender como eu faço?

Porque você não faz uminner join com group by? já sai o dado pronto!

Não conheço o GROUP BY do SQL, estou sabendo agora, valeu, já ajudou muito!!!

Eu não sei user direito esse SELECT com INNER JOIN, estou longe dessa aula do curso de SQL que eu faço, mas já uso no meu site…

Eu pego as informações de duas tabelas para selecionar assim, com esse exemplo que eu encontrei pronto e adaptei ao meu site…

$sqlDados = "SELECT s.*, u.thumb FROM status AS s LEFT JOIN users AS u ON u.username = s.author WHERE (s.account_name= '$u' AND s.type='a') OR (s.account_name='$u' AND s.type='c') ORDER BY s.postdate DESC LIMIT 20"

Essa linha eu peguei pronta e adaptei ao meu site, mas não entendo o funcionamento dela ainda

Vou pesquisar agora sobre o inner join com group by, se conseguir fazer eu volto pra Classificar sua resposta…

Obrigado!!! :smiley:

1 curtida