#php #mysql #multidimensional-array
#php #mysql #многомерный массив
Вопрос:
Я повсюду искал правильный формат для создания многомерного массива из фильтра базы данных. Я использую php-оболочку constant contact для проекта, которому требуется точный формат для загрузки массива адресов электронной почты, имен и фамилий. Смотрите ниже для правильного формата массива, который будет принимать класс:
<php?
$contacts = array(
array(
'Email Address' => 'test@test.com',
'First Name' => 'Mike - TEST API',
'Last Name' => 'NULL',
)
);
Код в том виде, в каком он у меня есть сейчас, приведен ниже:
<form action="<?php echo $PHP_SELF;?>" method="get" name="form" target="_self" id="form">
<p>
<select name="networks[]" size="50" multiple>
<option value="West Bronx">West Bronx</option>
<option value="Williamsburg">Williamsburg</option>
<option value="Turtle Bay">Turtle Bay</option>
<option value="Times Square">Times Square</option>
<option value="Southeast Bronx">Southeast Bronx</option>
<option value="Sutton">Sutton</option>
<option value="Sunnyside">Sunnyside</option>
<option value="Sheridan Square">Sheridan Square</option>
<option value="Sheepshead">Sheepshead</option>
<option value="Roosevelt">Roosevelt</option>
<option value="Riverdale">Riverdale</option>
<option value="Ridgewood">Ridgewood</option>
<option value="Richmond Hill">Richmond Hill</option>
<option value="Battery Park City Network">Battery Park City Network</option>
<option value="Yorkville">Yorkville</option>
</select>
<br>
<input type="submit" name="Submit" value="Submit">
</form>
<?
// Get the value of the filters and see if there are more then one selection
$foo = $_GET['networks'];
$sQuery = "";
if (sizeof($foo) > 0) {
for ($i=0;$i<sizeof($foo);$i ) {
$sQuery .= "Network LIKE '%$foo[$i]%' OR ";
}
}
else{
$sQuery = "Network LIKE '%$foo[0]%";
}
mysql_select_db($database_conn, $conn);
$query_Recordset0 = "SELECT * FROM contacts WHERE $sQuery ";
// Knock the last "OR" off the Query
$query_Recordset1 = substr($query_Recordset0, 0, -4);
echo $query_Recordset1;
$Recordset1 = mysql_query($query_Recordset1, $conn) or die(mysql_error());
?>
<table width="200" border="0" cellpadding="0" cellspacing="0">
<tr>
<td>Network</td>
<td>Email</td>
</tr>
<?php do { ?>
<tr>
<td><?php echo $row_Recordset1['Network']; ?></td>
<td><?php echo $row_Recordset1['Email']; ?></td>
<td><?php echo $row_Recordset1['First Name']; ?></td>
<td><?php echo $row_Recordset1['Last Name']; ?></td>
</tr>
<?php
//BUILD The Multidimensional Array from the database Query and store it appropriately
$newarray = array();
$newarray[]['Email Address']=$row_Recordset1['Email'];
$newarray[]['First Name']='NULL';
$newarray[]['Last Name']='Last Name';
print_r($newarray);
Это создает массив, подобный этому:
Array (
[0] => Array ( [Email Address] => )
[1] => Array ( [First Name] => NULL )
[2] => Array ( [Last Name] => Last Name ) )
Array (
[0] => Array ( [Email Address] => silverslammer@aol.com )
[1] => Array ( [First Name] => NULL )
[2] => Array ( [Last Name] => Last Name ) )
Array (
[0] => Array ( [Email Address] => shlomi@lmopticaldisc.com )
[1] => Array ( [First Name] => NULL )
[2] => Array
Буду признателен за любую помощь.
Ниже показано, как мне нужно, чтобы это выглядело:
$contacts = array(
array(
'Email Address' => 'test@test.com',
'First Name' => 'Mike - TEST API',
'Last Name' => 'NULL',
)
);
Комментарии:
1. не могли бы вы, пожалуйста, показать нам, как выглядели бы данные, если бы ваш код работал?
Array ( [0] => '', [1] => NULL, [2] => Last Name), Array ( [0] => silverslammer@aol.com, [1] => NULL, [2] => Last Name), Array ( [0] => shlomi@lmopticaldisc.com, [1] => NULL, [2] => '')
2. После переформатирования ваших выходных массивов выясняется, что в вашем исходном вопросе отсутствовала часть третьего массива.
3. Да, правильный формат будет выглядеть следующим образом: Array ( [0] => Array ( [Адрес электронной почты] => mkephart@ecsgrid.com [Имя] => Mike — TEST API [Фамилия] => NULL ) [1] => Массив ( [Адрес электронной почты] => jheckman@ecsgrid.com [Имя] => Bryan — TEST API [Фамилия] => NULL )
4. Я думаю, мне может понадобиться использовать цикл for для добавления каждого значения, но я не уверен, как это сделать в данном конкретном случае
Ответ №1:
$newarray[] = array(
'Email Address'=>$row_Recordset1['Email'];
'First Name'=>'NULL';
'Last Name'=>'Last Name';
);
print_r($newarray);
Комментарии:
1. Кажется, это работает, спасибо! По какой-то причине, однако, он возвращает некоторые пустые значения до того, как туда попадут фактические данные. Массив ( [0] => Массив ( [Адрес электронной почты] => [Имя] => [Фамилия] => ) ) Массив ( [0] => Массив ( [Адрес электронной почты] => [Имя] => [Фамилия] => ) [1] => Массив ( [Адрес электронной почты] => mtoborg@jhha.org [Имя] => [Фамилия] => ) ) Массив ( [0] => Массив ( [Адрес электронной почты] => [Имя] => [Фамилия] => ) [1] => Массив ( [Адрес электронной почты] => mtoborg@jhha.org [Имя] => [Фамилия] => ) [
2. вы правильно инициализируете свой массив? можете ли вы проверить выходные данные вашей базы данных, чтобы убедиться, что не возвращаются пустые записи?
3. Я просто печатал это внутри цикла for — теперь все работает отлично, спасибо!