Чтобы понять массив в PHP при задании другой переменной в массиве

Пожалуйста, см. Ответ Ча, где мы довольно близки к окончательному решению. Мы отлаживаем код с этими данными

  1. базы данных в PostgreSQL
  2. тестовые sql-запросы

Проблема, связанная с нерешенной проблемой в коде

Как вы можете ссылаться на php элемент в следующем массиве?

У меня есть следующие данные

Array ( [1] => Array ( [tag] => Array ( [0] => php [1] => scripts ) ) [2] => Array ( [tag] => Array ( [0] => ssh [1] => network ) ) ) 

где массивы обозначают tags_and_id , question_id и tag соответственно. Другими словами, переменная $tags_and_id имеет столбец question_id и все еще имеет tag подколонки и что каждый отдельный тег.

Я хотел бы знать, как вы можете ссылаться на тег php .

Я безуспешно проигрываю в качестве вывода

 echo $tags_and_id[1]['tag'][0]; 

Если вы хотите добавить дополнительную информацию о каждом вопросе, вы можете просто добавить к $end_array[1] . Это массив, который создает мой первый оператор foreach :

 // The end result turns out to be something like this: array( 1 => array( 'tags' => array( 0 => "php", 1 => "sql"), ) ); 

 <?php $dbconn = pg_connect("host=localhost port=5432 dbname=noa user=noa password=123"); if( empty($_GET) ) { // to get titles and question_ids $result_titles_tags = pg_prepare( $dbconn, "query777", "SELECT question_id, title FROM questions WHERE question_id IN ( SELECT question_id FROM questions ORDER BY was_sent_at_time DESC LIMIT 50 ) ORDER BY was_sent_at_time DESC LIMIT 50;" ); $result_titles = pg_execute( $dbconn, "query777", array()); // TAGS $result_tags = pg_prepare( $dbconn, "query9", "SELECT question_id, tag FROM tags WHERE question_id IN ( SELECT question_id FROM questions ORDER BY was_sent_at_time DESC LIMIT 50 );" ); $result_tags = pg_execute( $dbconn, "query9", array()); 

и исходный код в вопросе

  // Go through each Tag while( $tags_and_Qid = pg_fetch_array( $result_tags )) { // Add the Tag to an array of tags for that question $end_array [ $tags_and_Qid['question_id'] ] ['tag'] [] = $tags_and_Qid['tag']; } // First compile the Data // Go through each question while( $titles_and_Qid = pg_fetch_array( $result_titles ) ) { echo ("<div class='question_summary'>" . $titles_and_Qid['title'] // Problem here! // How can you print the titles such that // they are assigned to each tag -set? ); $i = 0; // Then Loop Through each question foreach( $end_array as $tags_and_Qid['question_id'] => $tags_and_Qid['tag'] ) { echo ("\n\nITERATION NUMBER IS " . $i); // The code is buggy here // For instance, we get 9 iterations for 3 questions // Create the starting HTML echo ("<div class='tags'>"); // Go through each tag // not sure about this foreach( $end_array[$tags_and_Qid['question_id']] ['tag'] as $tag ) { echo ( "<a class='post_tag' href='?tag=" . $tag . "'>" . $tag . "</a>" ); } // end the html echo '</div>'; $i++; } echo ("</div>"); } // to end the list of questions echo ("</div>" ); } ?> 

Если print_r не работает, то перед этим что-то не так. Ваши данные, вероятно, не структурированы так, как вы думаете, что они структурированы.

И могу ли я просто рекомендовать, что если у вас есть только тег и имя вопроса, вы просто храните его как один уровень, который выглядит следующим образом:

 array( 'php' => '7', 'sql' => '7', 'python' => '3' ) 

Если у вас есть другие вещи, которые вы собираетесь хранить, тогда да, вам придется делать то, что вы делаете. В этом случае, если вы не можете получить доступ к массиву с помощью ключей в скобках, ваши ключи, вероятно, не так, как вы думаете, или что-то не так с вашим кодом.

Я посмотрел ваш код и почему вы запрашиваете результаты запроса, такие как $row[0] , вместо $row['question_id'] ?

Кроме того, вы не можете print_r($result_tags) , потому что данные из запроса на самом деле не хранятся PHP, на него ссылаются только ссылки. поэтому вам нужно использовать цикл while, чтобы пройти через него, поскольку скрипт будет вызывать одну строку результатов за раз.

Вы говорите: foreach( $result_tags as $question_id => $data ) Это не имеет смысла, потому что для $result_tags нет значения, кроме ссылки на запрос, который может использоваться для вызова одной строки результатов за раз , Вместо этого вы хотите:

 while( $row2 = pg_fetch_array( $result_tags )) { $question_id = $row2['questions_question_id']; $data = $row2['data']; $end_array[$question_id]['tags'][] = $data; // you can't have your $data['tag'] as that refers to the // value of an array that doesn't exist }