Вернуть один столбец из многомерного массива


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 или выше.
Léo Lam

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, ','); будет работать, потому что вам нужны только значения. В 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.