Перезаписать массив

755
07 февраля 2017, 23:08

Здравствуйте, у меня есть вложенные массивы:

Array
(
    [0] => Array
    (
        [id] => 1
        [title_ru] => Сиделка
        [description_ru] => Уход за пожилыми людьми, помощь больным и не самостоятельным
        [meta_desc_ru] => Уход за пожилыми людьми, помощь больным и не самостоятельным
        [meta_key_ru] => 
        [title_en] => Nurse
        [description_en] => Care for the elderly, the sick and not an independent
        [meta_desc_en] => Care for the elderly, the sick and not an independent
        [meta_key_en] => 
        [title_it] => Badante
        [description_it] => La cura per gli anziani, i malati e non indipendente
        [meta_desc_it] => La cura per gli anziani, i malati e non indipendente
        [meta_key_it] => 
    )
    [1] => Array
    (
        [id] => 2
        [title_ru] => Уборки
        [description_ru] => Уборки домов, уборка квартир и офисов, уборка в подъезде
        [meta_desc_ru] => Уборки домов, уборка квартир и офисов, уборка в подъезде
        [meta_key_ru] => Уборки домов, уборка квартир и офисов, уборка в подъезде
        [title_en] => Cleaning
        [description_en] => Cleaning houses, cleaning offices and apartments, cleaning in the stairwell
        [meta_desc_en] => Cleaning houses, cleaning offices and apartments, cleaning in the stairwell
        [meta_key_en] => Cleaning houses, cleaning offices and apartments, cleaning in the stairwell
        [title_it] => Pulizia
        [description_it] => Pulizia di uffici e appartamenti di pulizia, la pulizia nella tromba delle scale
        [meta_desc_it] => Pulizia di uffici e appartamenti di pulizia, la pulizia nella tromba delle scale
        [meta_key_it] => Pulizia di uffici e appartamenti di pulizia, la pulizia nella tromba delle scale
    )
    [2] => Array
    (
        [id] => 3
        [title_ru] => Недвижимость
        [description_ru] => Объявления по недвижимости, продажа квартир, съем или сдача квартир, комнат. Тут, вы быстро найдете себе крышу над головой!
        [meta_desc_ru] => Объявления по недвижимости, продажа квартир, съем или сдача квартир, комнат. Тут, вы быстро найдете себе крышу над головой!
        [meta_key_ru] => продажа квартир, съем или сдача квартир, съем или сдача комнаты
        [title_en] => The property
        [description_en] => Classifieds real estate, apartments for sale, renting or renting apartments, rooms. Here, you will quickly find yourself a roof over his head!
        [meta_desc_en] => Classifieds real estate, apartments for sale, renting or renting apartments, rooms. Here, you will quickly find yourself a roof over his head!
        [meta_key_en] => apartments for sale, renting or renting apartments
        [title_it] => Immobili
        [description_it] => Annunci immobiliari, appartamenti in vendita, noleggio o affitto di appartamenti, camere. Qui, si rapidamente trovare te stesso un tetto sopra la testa!
        [meta_desc_it] => Annunci immobiliari, appartamenti in vendita, noleggio o affitto di appartamenti, camere. Qui, si rapidamente trovare te stesso un tetto sopra la testa!
        [meta_key_it] => appartamenti in vendita, noleggio o affitto di appartamenti, camere
    )
)

но я хочу перезаписать его чтоб он был в таком виде:

Array
(
    [0] => Array
    (
        [id] => 1
        [title_ru] => Сиделка
        [description_ru] => Уход за пожилыми людьми, помощь больным и не самостоятельным
        [meta_desc_ru] => Уход за пожилыми людьми, помощь больным и не самостоятельным
        [meta_key_ru] => 
    )
    [1] => Array
    (
        [id] => 2
        [title_ru] => Уборки
        [description_ru] => Уборки домов, уборка квартир и офисов, уборка в подъезде
        [meta_desc_ru] => Уборки домов, уборка квартир и офисов, уборка в подъезде
        [meta_key_ru] => Уборки домов, уборка квартир и офисов, уборка в подъезде
    )
    [2] => Array
    (
        [id] => 3
        [title_ru] => Недвижимость
        [description_ru] => Объявления по недвижимости, продажа квартир, съем или сдача квартир, комнат. Тут, вы быстро найдете себе крышу над головой!
        [meta_desc_ru] => Объявления по недвижимости, продажа квартир, съем или сдача квартир, комнат. Тут, вы быстро найдете себе крышу над головой!
        [meta_key_ru] => продажа квартир, съем или сдача квартир, съем или сдача комнаты
    )
)

не могу понять как, потому что тут 3 массива, не понимаю как правильно составить цикл

Answer 1

Вы можете использовать простой цикл по элементами массива, а результаты следует добавлять в новый массив ($data - ваш исходный массив)

$result = [];
foreach($data as $d){
    $result[] = [
                   'id' => $d['id'], 
                   'title_ru' => $d['title_ru'],
                   'description_ru' => $d['description_ru'],
                   'meta_desc_ru' => $d['meta_desc_ru'],
                   'meta_key_ru' => $d['meta_key_ru']
                 ];
}

Также вы можете использовать функциюю array_map()

$result = array_map(function($d){
             return [
                   'id' => $d['id'], 
                   'title_ru' => $d['title_ru'],
                   'description_ru' => $d['description_ru'],
                   'meta_desc_ru' => $d['meta_desc_ru'],
                   'meta_key_ru' => $d['meta_key_ru']
                 ];
          }, $data);

Также возможен и подход, когда вы простой пройдетесь по исходному массиву,а также его вложенным элемента, и удалите ненужное с помощью unset(), а также прочие вариации.

Answer 2

Например так:

$original = [/* ... */];
$filtered = [];
foreach ($original as $block_key => $block) {
    $filtered[$block_key] = array_filter($block, function ($key) {
        return ($key === 'id') || preg_match('/_ru$/', $key);
    }, ARRAY_FILTER_USE_KEY);
}
var_dump($filtered);

А вот и рабочий пример на IDEOne.

Answer 3

Спасибо всем кто откликнулся, пока ждал ответа, я вышел на улицу освежил кипящий мозг. Когда вернулся и прочитал ваши ответы, и тут отдельное спасибо teran'у, он натолкну меня на вариант который мне полностью подошел!

       foreach($row as $key => $value) {
            $result[$key] = array(
                'id' => $value['id'],
                'title' => $value['title_'.$_SESSION['lang']],
                'description' => $value['description_'.$_SESSION['lang']],
                'meta_desc' => $value['meta_desc_'.$_SESSION['lang']],
                'meta_key' => $value['meta_key_'.$_SESSION['lang']]
            );
        }
READ ALSO
Как добавить условие в dataProvider в yii2

Как добавить условие в dataProvider в yii2

С помощью CRUD с генерировал GridView на индексной странице

1138
запуск Python скрипта через PHP

запуск Python скрипта через PHP

делаю такправа на скрипт +x

1129