Повернення одного стовпця з багатовимірного масиву


79

Я новачок у PHP, і мені потрібне швидке вирішення наведеної нижче проблеми, але, здається, не можу її придумати:

У мене такий багатовимірний масив

Array
(
    [0] => Array
        (
            [blogTags_id] => 1
            [tag_name] => google
            [inserted_on] => 2013-05-22 09:51:34
            [inserted_by] => 2
        )

    [1] => Array
        (
            [blogTags_id] => 2
            [tag_name] => technology
            [inserted_on] => 2013-05-22 09:51:34
            [inserted_by] => 2
        )
)

Я хочу використовувати, implode()щоб якось повернути рядок, відокремлений комами, що містить значення tag_nameключа приблизно так.

google, technology

Чи можливо досягти цього ефекту за допомогою згаданої функції? Якщо ні, то, будь ласка, запропонуйте альтернативне рішення.

Відповіді:


183

Досить просто:

$input = array(
  array(
    'tag_name' => 'google'
  ),
  array(
    'tag_name' => 'technology'
  )
);

echo implode(', ', array_map(function ($entry) {
  return $entry['tag_name'];
}, $input));

http://3v4l.org/ltBZ0


і нового в PHP v5.5.0, array_column:

echo implode(', ', array_column($input, 'tag_name'));

4
Зверніть увагу, що закриття підтримується лише на PHP 5.3 або вище.
Лео Лам,

2
Рішення для> = 5.5.0 ідеально!
Key-Six

Пішки з> 5,5 ... :)
Вішал Кумар Саху

13

Незважаючи на те, що це питання пов'язане з перетворенням рядків, я натрапив на це, бажаючи простого способу запису масивів у свої файли журналів. Якщо ви просто хочете отримати інформацію, і вам не байдужа точна чистота рядка, який ви можете розглянути:

json_encode($array)

Я знаю, що це здається хакерством, але працює як шарм (PHP 5.4 тут). ;)
Пауло Буено

1
@PauloBueno у 2020 році ви дійсно, дійсно не повинні використовувати PPH 5.4 !!
Мартін

9

array_mapце функція зворотного дзвінка, де ви можете грати з переданим масивом. це має спрацювати.

$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr));


5

дуже просто перейти до цього

$str;
foreach ($arrays as $arr) {
$str .= $arr["tag_name"] . ",";
}
$str = trim($str, ',');//removes the final comma 

3

Якщо ви хочете "tag_name" з пов'язаним "blogTags_id", використовуйте: (PHP> 5.5)

$blogDatas = array_column($your_multi_dim_array, 'tag_name', 'blogTags_id');
echo implode(', ', array_map(function ($k, $v) { return "$k: $v"; }, array_keys($blogDatas), array_values($blogDatas)));

1

У цій ситуації implode ($ array, ','); will працює, оскільки ви хочете лише значення. У PHP 5.6 працює для мене.

Якщо ви хочете імплодувати ключі та значення в одному, наприклад:
blogTags_id: 1
tag_name: google

$toImplode=array();
foreach($array as $key => $value) {
$toImplode[]= "$key: $value".'<br>';
}
$imploded=implode('',$toImplode);

Вибачте, я неправильно розумію, тому що заголовок "Імпортувати дані з багатовимірного масиву". Ну, моя відповідь все одно якось відповість на це, може комусь допомогти, тому не буде видаляти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.