Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Веб-Разработчик
 Аватар для Itachi261092
82 / 82 / 9
Регистрация: 23.01.2012
Сообщений: 702

Задать по условию элемент для вложенного массива с неопределённым ключём

27.03.2014, 14:09. Показов 879. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте ворумчане. помогите не пожалуйста с такой проблемой, никак не могу найти решение. есть у меня код вида:
PHP
1
2
3
4
5
6
$myArr["ITEMS"][] = array(
                "ID" => "1",
                "Name" => "Apple",
                "Color" => "green",
                "Can_Eat" => "yes",
            );
хочу сделать элемент включённым по условию if, вставлять ключ и присваивать ему нужное значение по условию - не годится. выносить в if/else создание двух массивов тоже не предлагать - это был бы худший вариант.

мне нужно что то типа:
PHP
1
2
3
4
5
6
$myArr["ITEMS"][] = array(
                "ID" => "1",
                "Name" => "Apple",
                "Color" => "green",
                if (1==1) "Can_Eat" => "yes";
            );
но таким образом, понятное дело оно не работает. обратиться к массиву напрямую не получается (либо я не знаю как) потому что не известен его ключ (данное действие производится в цикле)
решения путём усложнения кода типа делать массив с известным ключом, присваивать всё что нужно а потом писать в ITEMS[] тоже не предлагать.

Заранее благодарен всем откликнувшимся
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2014, 14:09
Ответы с готовыми решениями:

Isset для элементов вложенного массива
Здравствуйте. Извиняюсь за нубский вопрос, но. Есть следующий участок кода: if...

Найти максимальный элемент массива и сумму элементов массива по условию
Доброе утро!...Уже и не знаю в чём дело....Вот тебе и заочное отделение:) Написать программу, работающую с одномерным вещественным...

Записать элементы массива X, удовлетворяющие условию в массив Y; найти минимальный элемент массива X
4. Записать элементы массива X, удовлетворяющие условию Х, подряд в массив Y =. Определить минимальный элемент массива X.

9
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
27.03.2014, 15:35
PHP
1
2
3
4
5
6
$myArr["ITEMS"][] = array(
                "ID" => "1",
                "Name" => "Apple",
                "Color" => "green",
                "Can_Eat" => (1 == 1 ? "yes" : "no");
            );
или
PHP
1
2
3
4
5
6
7
8
9
10
$temp = array(
                "ID" => "1",
                "Name" => "Apple",
                "Color" => "green");
if (1 == 1) {
  $temp["Can_Eat"] =>"yes";
} else {
   $temp["Can_Eat"] =>"no";
}
$myArr["ITEMS"][] = $temp;
1
Веб-Разработчик
 Аватар для Itachi261092
82 / 82 / 9
Регистрация: 23.01.2012
Сообщений: 702
27.03.2014, 21:09  [ТС]
Drygba, спасибо, первый случай не подходит потому что при любом результате будет передаваться КЛЮЧ с пустым результатом - этого не нужно. во втором случае происходит как раз то чего я просил не соетовать - ввод лишнего массива и последующее присваиванее его результата в нужный мне массив. но всё равно спасибо за попытку
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
27.03.2014, 21:26
или у вас проблема в логики приложения или вы перемудрить хотите там где этого делать не надо.
0
Веб-Разработчик
 Аватар для Itachi261092
82 / 82 / 9
Регистрация: 23.01.2012
Сообщений: 702
27.03.2014, 21:55  [ТС]
Drygba, я хочу при минимальном колличестве лишних переменных сделать то что мне нужно, а именно:
1) есть входное условие типа boolean
2) есть некоторый вложенный массив, который формируется в цикле foreach
3) необходимо сделать так чтобы при истинности условия в нём присутствовал некоторый ключ со значением, иначе - отсутствовал (даже сам ключ)
4) создавать левые переменные и тем более массивы - нельзя.

единственный вариант при таком раскладе который мне кажется очевидным это:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$flag=true;
$i=0;
$mass=....;
foreach (mass as $myArr){
if ($flag==true)$myArr[] = array(
                "ID" => i++,
                "Name" => "Apple",
                "Color" => "green",
                "Can_Eat" => "yes",
            );
else $myArr[] = array(
                "ID" => i++,
                "Name" => "Apple",
                "Color" => "green",
            );
}
но мне это кажется неимоверно глупо и громоздко. я же не индус чтобы так писать. моё сознание отказывается верить в то что php не обладает функционалом для реализации if без else и без левых переменных
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
27.03.2014, 22:12
PHP
1
2
3
4
5
6
7
8
9
10
        foreach ($mass as &$myArr) {
            $item = array(
                "ID" => $i++,
                "Name" => "Apple",
                "Color" => "green",
            );
            if ($flag == true)
                $item["Can_Eat"] = "yes";
            $myArr=$item;
        }
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
27.03.2014, 22:31
Цитата Сообщение от Itachi261092 Посмотреть сообщение
4) создавать левые переменные и тем более массивы - нельзя.
вам просто для себя такое ограничение или задание с жесткими рамками?

По моему вы ищите проблемы на ровном месте. Отсутствие ключа которые потом где то будет проверяться идея не очень. Поставьте null если не хотите потом находить этот ключ. За что вы боретесь - скорость, размер? Не на том экономите.

Цитата Сообщение от Itachi261092 Посмотреть сообщение
моё сознание отказывается верить в то что php не обладает функционалом для реализации if без else и без левых переменных
PHP
1
2
3
4
5
6
$flag=true;
$i=0;
$mass=....;
foreach (mass as $myArr){
$myArr[] = array_combine(explode(',', 'ID,Name,Color' . ($flag ? ',Can_Eat' : '')), explode(',', '1,Apple,green' . ($flag ? ',yes' : '')));
}
но я бы за такое пальцы ломал.
0
Веб-Разработчик
 Аватар для Itachi261092
82 / 82 / 9
Регистрация: 23.01.2012
Сообщений: 702
28.03.2014, 01:37  [ТС]
Drygba, спасибо. уже лучше. но это тоже создаёт новый массив по сути.
Цитата Сообщение от Drygba Посмотреть сообщение
вам просто для себя такое ограничение или задание с жесткими рамками?
это лично моя прихоть
Цитата Сообщение от Drygba Посмотреть сообщение
За что вы боретесь - скорость, размер?
за всё вместе. подразумевается, возможно, что элементы в форич будут передаваться тысячами. поэтому каждая новая переменная или массив - зло. к тому же задаваемый массив так же может состоять не из 4 вложенных пармаетров как в этом примере а из десятков. и что если мне не один из них надо проверять? к каждому писать вызов в собственную переменную?
0
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
28.03.2014, 01:47
Цитата Сообщение от Itachi261092 Посмотреть сообщение
что элементы в форич будут передаваться тысячами.
пусть 100 байт на элемент(~в 5 раз меньше чем вашем примере и для строк UTF) пусть 10тыс элементов. Итого 10 мб. если бы вы не ломали мозг, а "писали как индус", не потеряли бы впустую 12 часов времени..
0
 Аватар для Drygba
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
28.03.2014, 11:55
Цитата Сообщение от Itachi261092 Посмотреть сообщение
это лично моя прихоть
интересно будет увидеть до чего дойдете в результате. Удачи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2014, 11:55
Помогаю со студенческими работами здесь

Найти максимальный по модулю элемент массива и сумму элементов массива, отвечающих условию
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) максимальный по модулю элемент массива; 2) сумму элементов...

Элемент с тем же ключем уже был добавлен
Суть проблемы такая. Есть ПО Timex(статистика проходов сотрудников). на slq сервере две базы AccessControl и Timex. На прошлой неделе были...

Найти первый элемент массива, удовлетворяющий условию
Дан массив чисел А, состоящий из n элементов. Найти первый элемент массива, удовлетворяющий условию a < a переставить на отрезке a - a...

Пропустить элемент массива в цикле foreach по условию
Как это реализовать? Помоггите срочно...

Задать и найти наибольший элемент массива
Помогите,пожалуйста. Рандомно задать одномерный массив длинной (0...100), найти наибольший элемент массива, который имеет непарный индекс


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru