Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
gridin
0 / 0 / 0
Регистрация: 22.09.2017
Сообщений: 10
1

Перебор двумерного массива в другой двумерный массив

23.09.2017, 17:50. Просмотров 1067. Ответов 4

Привет!

Имеется двумерный массив со следующей структурой:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Array
(
    [0] => Array
        (
            [url] => 123
            [title_rus] => abc
            [title_eng] => abc
            [start] => 123
            [end] => 123
        )
 
    [1] => Array
        (
            [url] => 123
            [title_rus] => abc
            [title_eng] => abc
            [start] => 123
            [end] => 123
        )
 
)
Имеется переменная $title, которая принимает значение либо 'title_rus' либо 'title_eng', по значению этой переменной нужно выбрать соответствующее значение из первого массива и поместить в title второго массива такого вида:


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array
(
    [0] => Array
        (
            [url] => 123
            [title] => abc
            [start] => 123
            [end] => 123
        )
 
    [1] => Array
        (
            [url] => 123
            [title] => abc
            [start] => 123
            [end] => 123
        )
 
)
естественно используя foreach.

Подскажите пожалуйста, я что то запутался...
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2017, 17:50
Ответы с готовыми решениями:

Выбор из массива элементов по ключу и занесение в другой массив
Добрый день! У меня имеется массив $arResult = array ( "ID" = 10, "NAME"...

Как скопировать без цикла, первые 3 элемента массива в другой массив?
Как скопировать без цикла (for,foreach) первые 3 элемента массива в другой...

Перебор массива
Собственно вот массив, с вопросами для тестов: <?php $questions = array( ...

Перебор массива
Здравствуйте, помогите правильно перебрать массив. Есть двумерный массив вида:...

Перебор массива
Всем привет, как можно получить из такого используя print_r($mass_time); Array...

4
РустамКР
5 / 6 / 2
Регистрация: 02.02.2014
Сообщений: 123
23.09.2017, 22:29 2
Написал как понял ТЗ.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$arr_1=array(array('url'=>123,'title_rus'=>'abc_1','title_eng'=>'abc_2','start'=>123,'end'=>123),
array('url'=>123,'title_rus'=>'abc_3','title_eng'=>'abc_4','start'=>123,'end'=>123));//массив №1. 
 
$arr_2=array(array('url'=>123,'title'=>'def_1','start'=>123,'end'=>123),
array('url'=>123,'title'=>'def_2','start'=>123,'end'=>123));//массив №2.
 
$title='title_rus';//переменная может содержать значение 'title_rus' или 'title_eng'.
 
$result=array();
$result_2=array();
 
foreach($arr_1 as $key_1 => $res_val){//получаем значения title_rus или title_eng и помещаем в массив $result.
    foreach($res_val as $key_2 => $value){
        if($title=='title_rus'){
            if($key_2=='title_rus'){
                $result[]=$value;
            }
        }elseif($title=='title_eng'){
            if($key_2=='title_eng'){
                $result[]=$value;
            }
        }
    }
}
 
$i=0;
foreach($arr_2 as $key_3 => $res_val_2){//создаем новый массив, и заменяем значения полей title.
    foreach($res_val_2 as $key_4 => $value_2){
        if($key_4=='title'){
            $result_2[$key_3][$key_4]=$result[$i++];
        }else{
            $result_2[$key_3][$key_4]=$value_2;
        }
    }
}
$arr_2=$result_2;//Присваиваем старому массиву новые значения.
print_r($arr_2);//Выводим наш массив с новыми значениями, зависящий от значения переменной $title.
1
gridin
0 / 0 / 0
Регистрация: 22.09.2017
Сообщений: 10
24.09.2017, 09:58  [ТС] 3
Спасибо, это похоже на правду))
Вот только массива $arr_2 у меня нет, он должен получаться в результате.
Мне думается это можно сделать в одном цикле foreach + вложенный цикл.
Нельзя ли сделать чтобы в одном цикле при переборе одного массива сразу же заполнять новый массив?
p.s. еще в первом цикле думаю надо подставлять переменную $title, вместо title_rus, tile_eng...
0
Jodah
Эксперт PHP
2843 / 2476 / 1055
Регистрация: 01.08.2012
Сообщений: 8,768
24.09.2017, 11:39 4
Лучший ответ Сообщение было отмечено gridin как решение

Решение

gridin,

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$data = [
    [
        'url' => 123,
        'title_rus' => 'абв',
        'title_eng' => 'abc',
        'start' => 123,
        'end' => 123,
    ],
    [
        'url' => 456,
        'title_rus' => 'где',
        'title_eng' => 'dfg',
        'start' => 456,
        'end' => 456,
    ],
];
 
$title = 'title_rus';
 
$new_data = [];
 
foreach($data as $row)
{
    $new_data[] = [
        'url' => $row['url'],
        'title' => $row[$title],
        'start' => $row['start'],
        'end' => $row['end']
    ];
}
 
echo '<pre>';
var_dump($new_data);
1
gridin
0 / 0 / 0
Регистрация: 22.09.2017
Сообщений: 10
24.09.2017, 12:03  [ТС] 5
Цитата Сообщение от Jodah Посмотреть сообщение
gridin,

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$data = [
    [
        'url' => 123,
        'title_rus' => 'абв',
        'title_eng' => 'abc',
        'start' => 123,
        'end' => 123,
    ],
    [
        'url' => 456,
        'title_rus' => 'где',
        'title_eng' => 'dfg',
        'start' => 456,
        'end' => 456,
    ],
];
 
$title = 'title_rus';
 
$new_data = [];
 
foreach($data as $row)
{
    $new_data[] = [
        'url' => $row['url'],
        'title' => $row[$title],
        'start' => $row['start'],
        'end' => $row['end']
    ];
}
 
echo '<pre>';
var_dump($new_data);
Спасибо большое, именно то что нужно!
И как я сам не сообразил, это же элементарно.
0
24.09.2017, 12:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2017, 12:03

Перебор массива
Привет. Есть массив $user = array(); foreach($config as $form_id){...

Перебор массива
Добрый день! Подскажите как можно получить значения массива между пустыми...

Перебор массива $_FILES
Здравствуйте. Подскажите, что я делаю не так? Почему я получаю ошибку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru