развернуть числовой вложенный массив ассоциативного массива

Это может быть дубликатом нескольких вопросов.
У меня динамический массив

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;
}
}

Спасибо заранее.

2

Решение

Всего несколько небольших изменений:

  • я добавил 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>
1

Другие решения

Это работает так, как вы ожидаете:

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;
}
}
1

У вас есть массив данных, и вы хотите отобразить его в таблице. Вместо использования 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;
}
}
0

Замените следующий код:

if($key == "age"){
$age = implode(",", $age_array);
}

с

if($key == "age"){
$age = implode(",", $value);
}
0

Вам нужно кодировать следующим образом …

foreach($post as $value){
$gender = $value['gender'];
$age = implode(',',$value['age']);
$name = $value['name'];
$email = $value['email'];
}
0

Измените свой цикл 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;
}
}
0
$output = [];
//$array - your input data
foreach ($array as $key => $item) {
$output[$key] =  (is_array($item)) ?  implode(', ', $item) : $item;
}
//print output
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector