Это может быть дубликатом нескольких вопросов.
У меня динамический массив
Array
(
[gender] => Male
[age] => Array
(
[0] => 18-25 years
[1] => 26-32 years
)
[name] => Nagesh
[emailid] => nagesh@ccomsys.net
)
Я хочу сохранить этот массив в таблице HTML как ключ в одном столбце и значение в другом
Пример.
__________________________________
Gender | Male
_______|__________________________
Age | 18-25 years, 26-32 years
_______|__________________________
Name | Nagesh
_______|__________________________
Email | nagesh@ccomsys.net
_______|__________________________
Я получаю ключ и значение для ассоциативного массива, но как я могу взорвать массив возраста.
Я пробовал ниже код
$post = $this->request->post;
$age_array = array_column($post, 'age');
$age = '';
foreach($post as $key => $value) {
if($key == "age"){
$age = implode(",", $age_array);
}
echo $age. "<br>";
echo $key. "<br>";
if($key != "age"){
echo $value. "<br>";
} else {
echo $age;
}
}
Спасибо заранее.
Всего несколько небольших изменений:
ucfirst()
в первый столбец, чтобы соответствовать желаемому результату.Код: (демонстрация)
$post=[
'gender'=>'Male',
'age'=>['18-25 years','26-32 years'],
'name'=>'Nagesh',
'emailid'=>'nagesh@ccomsys.net'
];
echo '<table border=1>';
foreach($post as $k=>$v){
echo '<tr>';
echo '<td>',ucfirst($k),'</td><td>',(is_array($v)?implode(', ',$v):$v),'</td>';
echo '</tr>';
}
echo '</table>';
Unrendered Output:
<table border=1>
<tr>
<td>Gender</td><td>Male</td>
</tr>
<tr>
<td>Age</td><td>18-25 years, 26-32 years</td>
</tr>
<tr>
<td>Name</td><td>Nagesh</td>
</tr>
<tr>
<td>Emailid</td><td>nagesh@ccomsys.net</td>
</tr>
</table>
Отображаемый вывод доступен через исполняемый фрагмент:
<table border=1><tr><td>Gender</td><td>Male</td></tr><tr><td>Age</td><td>18-25 years, 26-32 years</td></tr><tr><td>Name</td><td>Nagesh</td></tr><tr><td>Emailid</td><td>nagesh@ccomsys.net</td></tr></table>
Это работает так, как вы ожидаете:
foreach($post as $key => $value) {
echo $key. "<br>";
if($key == "age"){
$age = implode(",", $post[$key]);
echo $age. "<br>";
}
if($key != "age"){
echo $value. "<br>";
} else {
//echo $age;
}
}
Если вы получаете несколько массивов, значит, это будет работать. Я изменил мелочи в вашем состоянии:
foreach($post as $key => $value) {
echo $key. "<br>";
if(is_array($post[$key])){
$age = implode(",", $post[$key]);
echo $age. "<br>";
}
if(!is_array($post[$key])){
echo $value. "<br>";
} else {
//echo $age;
}
}
У вас есть массив данных, и вы хотите отобразить его в таблице. Вместо использования implode (), почему бы не объединить две строки вместе?
Array
(
[gender] => Male
[age] => Array
(
[0] => 18-25 years
[1] => 26-32 years
)
[name] => Nagesh
[emailid] => nagesh@ccomsys.net
)
Код PHP:
$post = $this->request->post;
foreach($post as $key => $value) {
if($key == "age"){
$age = $value[0].','.$value[1];
}
echo $age. "<br>";
echo $key. "<br>";
if($key != "age"){
echo $value. "<br>";
} else {
echo $age;
}
}
Замените следующий код:
if($key == "age"){
$age = implode(",", $age_array);
}
с
if($key == "age"){
$age = implode(",", $value);
}
Вам нужно кодировать следующим образом …
foreach($post as $value){
$gender = $value['gender'];
$age = implode(',',$value['age']);
$name = $value['name'];
$email = $value['email'];
}
Измените свой цикл foreach с этим.
foreach($test as $key => $value) {
$age = '';
if($key == "age"){
$age = implode(",", $value);
}
echo $age. "<br>";
echo $key. "<br>";
if($key != "age"){
echo $value. "<br>";
} else {
echo $age;
}
}
$output = [];
//$array - your input data
foreach ($array as $key => $item) {
$output[$key] = (is_array($item)) ? implode(', ', $item) : $item;
}
//print output