Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469

Копирование key и values из одного массива в другой?

01.12.2022, 18:15. Показов 3343. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция array_keys возврaщает лишь ключи массива без значений, верно?
Тогда как цикл имя лишь ключи главного массива($massive)
помимо ключей записывает еще и значения из главного массива в массив для хранения($new)

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$massive = ["dok"=>1, "xop" =>2, "kok" =>3]; // главный массив
 
$keys = array_keys($massive);  // эта функция возвращает лишь ключи главного массива 
 
shuffle($keys);
 
$new = [];  // массив для хранения
 
foreach($keys as $items){ // так как переменная $keys хранит в себе лишь ключи главного массива, 
                          // то и в $items по идее должны передаться лишь ключи $massive,
                          // но каким-то чудом, помимо ключей передаются еще и значения из $massive в $new
 
$new[$items] = $massive[$items];
}
 
foreach($new as $key => $items){
echo "Ключ:$key Значение:$items <br>";
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2022, 18:15
Ответы с готовыми решениями:

Копирование из одного массива в другой массив одного объекта
Пытаюсь скопировать дного массива в другой массив один объект, но не выходит. Условие следующее. - есть созданные массивы: public...

Копирование одного массива в другой
Как массив из одного вытащить в другой!?

Копирование одного массива в другой
Всем добрый день. Насколько мне известно использование имени массива без индекса образует указатель на первый элемент массива. В программе...

30
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
02.12.2022, 15:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от G_manX Посмотреть сообщение
$new["dok"[0]] ?
нет.)

Эти скобки рассматриваются парсером примерно так-же как скобки в математике.
напрмер a-(b*(c+d))
сначала вычисляется самое вложенное...
затем с использованием полученного результата тот блок в котором это находилось...
и так далее по нисходящей уровней вложенности... если так сказать )

$massive[$keys[$a]]
-> $massive[$keys[0]]
-> $massive["dok"]
-> 1

Не по теме:

Вроде всё просто ... но это как накодить ))

PHP
1
2
3
4
5
6
7
8
$ cat <<\x | php
<?php
$arr=['first'=>1,'second'=>2,'third'=>3];
$k='third';
$name=['arr'];
echo ${$name{0}}{$k},"\n";
x
3
Иногда просто вообще никак не уйти от такого использования переменных

0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
02.12.2022, 16:01  [ТС]
sad67man
При первой итерации $new[$keys[$a]] это все равно, что $a = $new[$keys[0]]; ?

Добавлено через 4 минуты
ft4l,

Значит $new[$keys[$a]] это комбинация из трех действий?
1) $new[$keys[0]]
2) $new["dok"]
3) затем единичка сохраняется в переменную $a, дабы начать следующую итерацию?
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
02.12.2022, 16:42
Цитата Сообщение от G_manX Посмотреть сообщение
Значит $new[$keys[$a]] это комбинация из трех действий?
1) $new[$keys[0]]
2) $new["dok"]
3) затем единичка сохраняется в переменную $a, дабы начать следующую итерацию?
Да, только не $new[$keys[$a]], а $massive[$keys[$a]];

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
// сначала выполняется правая часть
 
$new[$keys[$a]] = $massive[$keys[$a]]; 
$new[$keys[$a]] = $massive[$keys[0]];
$new[$keys[$a]] = $massive["dok"];
$new[$keys[$a]] = 1;
 
// затем левая
 
$new[$keys[0]] = 1;
$new["dok"] = 1;
 
и в самом конце присваивание.
Порядок примерно такой.
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,900
Записей в блоге: 2
02.12.2022, 16:45
Цитата Сообщение от G_manX Посмотреть сообщение
комбинация из трех действий?
Снова трудный вопрос )) сложно сказать когда это выполняется.
Как-бы да... действия.
По крайней мере это не выполняется при Compile-time parsing . только проверяется синтаксис.
Преобразуется где-то уже к Run-time..
Хотя не припоминаю что где-то принято называть действиями / операциями... языковЫе конструкции какие-то наверно
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
02.12.2022, 17:24
Цитата Сообщение от ft4l Посмотреть сообщение
Хотя не припоминаю что где-то принято называть действиями / операциями... языковЫе конструкции какие-то наверно
Честно сейчас не хочу вдаваться в подробности. В документации по php ничего не нашел, но к примеру в javascript [] и (.) - называют операторами доступа к элементам массива/объекта.

Все еще зависит от контекста. И для объяснения приоритета и порядка выполнения в принципе допускаю называть это операциями/действиями.
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
02.12.2022, 17:35  [ТС]
sad67man,

Этот код помог мне более лучше понять картину.
Сделал тоже самое, но немного по-другому.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$massive = ["dok" => 1, "xop" => 2, "kek" => 3];
 
$keys = ["dok", "xop", "kek"];
 
$new = [];
 
 
$new["dok"] = 1; // это все равно что, $new[$keys[0]] = $massive[$keys[0]];
$new[$keys[1]] =  $massive[$keys[1]]; 
$new[$keys[2]] = 3; 
 
echo $massive[$keys[0]]."<br>"; // это все равно, что $massive["dok"];
 
foreach($new as $key => $items){
echo "ключ:$key  <br> значение:$items <br><br>";
}
Просто я раньше никогда не встречал такой синтаксис $new[$keys[0]], вот и я запутался,
но благодаря вашим усилиям я понял. Благодарю вас за помощь.

Но остался последний вопрос.
Значит у $new[$keys[0]] двойная вложенность индексов одного массива $new?
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
02.12.2022, 17:35
Хотя тут можно поиграться. К примеру

PHP
1
2
3
$arr = [];
 
$new[$arr['a']] = $arr['b'];
Выдает ошибки в таком порядке

NOTICE Undefined index: a on line number 5

NOTICE Undefined index: b on line number 5
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
02.12.2022, 17:38  [ТС]
sad67man,
Значит у $new[$keys[0]] двойная вложенность индексов одного массива $new?
А где можно подробно прочитать про двойную вложенность индексов массива?
0
 Аватар для sad67man
2605 / 1509 / 689
Регистрация: 23.08.2015
Сообщений: 3,841
02.12.2022, 17:49
Лучший ответ Сообщение было отмечено G_manX как решение

Решение

Цитата Сообщение от G_manX Посмотреть сообщение
Значит у $new[$keys[0]] двойная вложенность индексов одного массива $new?
Нет.

Вот пример из документации https://www.php.net/manual/ru/... .array.php

Существующий массив может быть изменён путём явной установкой значений в нем.

Это выполняется присвоением значений массиву (array) с указанием в скобках ключа. Кроме того, ключ можно опустить, в результате получится пустая пара скобок ([]).

$arr[key] = value;
$arr[] = value;
// key может быть int или string
// value может быть любым значением любого типа

$arr = array(5 => 1, 12 => 2);

$arr[] = 56; // В этом месте скрипта это
// то же самое, что и $arr[13] = 56;

$arr["x"] = 42; // Это добавляет к массиву новый
// элемент с ключом "x"
Указывать ключ можно динамически к примеру

PHP
1
2
3
4
$arr = [];
$b = 'x';
 
$arr[$b] = 42;
Так же это значение может браться из другого массива
PHP
1
2
3
4
5
6
7
8
9
10
$arr = [];
$bar = ['x'];
 
$b = $bar[0]; //  $b = 'x';
 
$arr[$b] = 42;
 
// или же
 
$arr[$bar[0]] = 42;
1
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
03.12.2022, 08:12  [ТС]
sad67man

Все ясно, оказывается $arr[$bar[0]] это просто синтаксис,
чтобы взять значение из $bar под индексу,
а затем это значение положить в $arr

PHP
1
2
3
4
5
6
7
8
9
10
$arr = [];
$bar = ['x'];
 
$b = $bar[0]; //  $b = 'x';
 
$arr[$b] = 42;
 
// или же
 
$arr[$bar[0]] = 42;
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
03.12.2022, 15:13  [ТС]
sad67man, вот я тупил конкретно.

Оказывается $arr[$bar[0]] это просто синтаксис,
чтобы добавить новый элемент в $arr с ключом из $bar[0]

PHP
1
$arr[$bar[0]] = 42;
В итоге получается, мы добавили новый элемент массива в $arr
при этом сделав ключом этого элемента значение из $bar[0],
а также присвоили этому новому элементу массива значение 42
Это все равно, что $arr["x"] = 42

Теперь мы можем вызвать этот самый элемент.
PHP
1
echo $arr["x"]; // 42
P.S.
Выражаю огромную благодарность сеньору sad67man и его другу ft4l
Пусть у вас будет здоровья вагон.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.12.2022, 15:13

Копирование из одного массива в другой
Знаю два варианта копирования из одного массива в другой 1. С помощью функции memcpy char src = &quot;Hello&quot;; char dst =...

Копирование одного массива в другой со сдвигом
Здравствуйте. Нужна помощь. Програмку написала, работает неправильно, не могу найти ошибку. С командной строки вводится матрица...

Копирование элементов из одного массива в другой
int main(int argc, char* argv) { setlocale(LC_ALL, &quot;rus&quot;); char v = &quot; 543321 &quot;; char s = &quot; a1c2ef &quot;; cout &lt;&lt;...

Копирование строки из одного массива в другой
Есть большой массив, который нужно разделить на два (пять, сто) Как скопировать строку из первого массива в любой другой с таким же...

Копирование символов из одного массива в другой
Как копировать символы из одномерного в двумерный массив?


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru