Перейти к содержимому


Конкурс "Лучший отзовик"
× Быстрый вопрос
Пользователь месяца
ShowPrint ShowPrint 1-й за Март
Очков активности: 1 152 1 тема, 61 сообщение, 12 баллов репутации
Сайт: ShowPrint.ru
ТОП самых активных за этот месяц
  • Фотография Андрей WPMasterKZ
    #1

    Андрей WPMasterKZ (wpmaster.kz)
    Очков активности: 1176 Вне конкурса за определение пользователя месяца

  • Фотография Vmir
    #2

    Vmir
    Очков активности: 960 7 тем, 43 сообщения, 10 баллов репутации

  • Фотография Mandarin
    #3

    Mandarin
    Очков активности: 630 14 тем, 28 сообщений, 6 баллов репутации

  • Фотография OlgaGetman
    #4

    OlgaGetman
    Очков активности: 564 Вне конкурса за определение пользователя месяца

  • Фотография ShowPrint
    #5

    ShowPrint (ShowPrint.ru)
    Очков активности: 243 Вне конкурса за определение пользователя месяца

  • Фотография maxnik
    #6

    maxnik (konovalovpavel.ru)
    Очков активности: 72 1 тема, 21 сообщение, 2 балла репутации

  • Фотография Megoydagi
    #7

    Megoydagi (24ho.ru)
    Очков активности: 72 1 тема, 21 сообщение, 2 балла репутации

  • Фотография pozitron123
    #8

    pozitron123
    Очков активности: 67.5 3 темы, 6 сообщений, 3 балла репутации

  • Фотография Исо
    #9

    Исо (avora.ru)
    Очков активности: 49.5 2 темы, 5 сообщений, 3 балла репутации

  • Фотография re-search
    #10

    re-search
    Очков активности: 49.5 7 тем, 12 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 20.04.2019
  • Яндекс выдача: 24.04.2019
Топ 5 участников по репутации


Добавление в массив, не используя его напрямую

#1 Russlav

Russlav
  • Пользователь
  • 370 сообщений
  • Репутация: 18
0

Отправлено 01 Октябрь 2015 - 20:06

Здравствуйте, я не понимаю, как в версии php 5.5 добавлять что-то ещё в массив, не использую его напрямую?


 

 

  • 0

#2 yury

yury
  • Пользователь
  • 647 сообщений
  • Репутация: 192

Отправлено 02 Октябрь 2015 - 10:51

Пример с пояснениями того что вам нужно – в студию.
Конкретно:
* в какой массив?
* что и в какое место массива добавлять?
* что значит "не используя его напрямую"?
 
А так вот вам простейший пример добавления в массив:

<?php
echo '<pre>';
$a=array(1=>1, 'w', array('It is', 'array', 'too'), 33); //исходный массив, 4 элемента, один из которых тоже массив
print_r ($a); //выводим массив на экран
$a[]=9; //добавляем элемент в конец
print_r ($a); //выводим массив на экран
//добавляем в 3й элемент массива (который тоже массив) 4 элемента в середину (с индекса 2)
array_splice($a[3], 2, 0, array('This', 'array', 'changed', 'now'));
print_r ($a); //выводим массив на экран
echo '</pre>';
?>

  • 0

#3 Russlav

Russlav
    Topic Starter
  • Пользователь
  • 370 сообщений
  • Репутация: 18

Отправлено 03 Октябрь 2015 - 23:24

Рассмотрим такой случай:

Есть массив

$array = ['яблоко', 'цифра'];

 

Вопрос, как добавить в содержимое массива пункт Земля, не используя это:

$array = ['яблоко', 'цифра'];


  • 0

#4 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 833

Отправлено 04 Октябрь 2015 - 10:01

@Russ33,  

$array[] = 'Земля';

 

 

Не, не так?


Сообщение отредактировал Ixman: 04 Октябрь 2015 - 10:07

  • 1


#5 Russlav

Russlav
    Topic Starter
  • Пользователь
  • 370 сообщений
  • Репутация: 18

Отправлено 04 Октябрь 2015 - 12:36

Пробовал. Если так написать, то выдаётся фатальная ошибка.


  • 0

#6 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 833

Отправлено 04 Октябрь 2015 - 13:37

@Russ33, подробнее бы как и что делается. Ибо в примере 

 

$array = ['яблоко', 'цифра'];
 

 

реализовано не правильно. Так делать нельзя


  • 0


#7 yury

yury
  • Пользователь
  • 647 сообщений
  • Репутация: 192

Отправлено 04 Октябрь 2015 - 14:05

Пробовал. Если так написать, то выдаётся фатальная ошибка.

Вот такой код не выдает никаких ошибок:
<?php
header("Content-Type: text/html; charset=utf-8");
echo 'Версия PHP: ', PHP_VERSION;
echo '<pre>';
$array = ['яблоко', 'цифра'];
$array[] = 'Земля';
print_r ($array);
echo '</pre>';
?>
Результат его такой (для PHP 5.6.1):

Версия PHP: 5.6.1

Array
(
[0] => яблоко
[1] => цифра
[2] => Земля
)


@Ixman,
начиная с PHP 5.4 возможно использовать короткий синтаксис определения массивов, который заменяет языковую конструкцию array() на [].
@Russ33,@Ixman,
примерный результат можно посмотреть вот в этой песочнице (вывод только PHP скрипта без отработки HTML-тегов)
https://eval.in/444480

Сообщение отредактировал yury: 04 Октябрь 2015 - 14:06

  • 3

#8 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 833

Отправлено 04 Октябрь 2015 - 14:13

@yury, спасибо не знал что так можно 


  • 0


#9 Russlav

Russlav
    Topic Starter
  • Пользователь
  • 370 сообщений
  • Репутация: 18

Отправлено 04 Октябрь 2015 - 20:13

$array = ['яблоко', 'цифра']; $array[] = 'Земля'; print_r ($array);

Если я просто напишу вот так:

 

<?

$array = ['22', '55'];

$array[] = '77';

echo $array;

?>

 

Сработает?

Вдобавок, а что если я array вытащил в какую-нибудь переменную, то вот это сработает (на вашем примере)?

 

$array = ['яблоко', 'цифра'];

foreach($array as $v){

  print_r ($v);

}
$v[] = 'Земля';
 


Сообщение отредактировал Russ33: 04 Октябрь 2015 - 20:17

  • 0

#10 yury

yury
  • Пользователь
  • 647 сообщений
  • Репутация: 192

Отправлено 04 Октябрь 2015 - 21:34

Если я просто напишу вот так:

<?
$array = ['22', '55'];
$array[] = '77';
echo $array;
?>
Сработает?

Если вы хотите добавить в массив еще 1 элемент '77' — сработает.

Команда же echo $array; выведет на экран слово "Array", т.к. не умеет того, что умеет print_r(). А умеет print_r() выводить на экран пригодную для чтения человеком информацию о переменной. Если в качестве аргумента этой функции дана строка, целое или вещественное число, печатается его значение. А если задан массив, значения массива будут представлены в формате с показом ключей и элементов.
Т.е. print_r($array) выведет на экран:
Array
(
    [0] => 22
    [1] => 55
    [2] => 77
)

Вдобавок, а что если я array вытащил в какую-нибудь переменную, то вот это сработает (на вашем примере)?
 

$array = ['яблоко', 'цифра'];
foreach($array as $v){
  print_r ($v);
}
$v[] = 'Земля';

"Вот это" не сработает.
Потому что у вас конструкция foreach в переменную $v будет помещать последовательно элементы массива $array, которые являются строками. Т.е. переменная $v у вас имеет тип "строка" и после выполнения цикла foreach в ней будет лежать значение 'цифра'. А со строковыми переменными так ($v[] = 'Земля';) нельзя обращаться — это будет расценено как фатальная ошибка: "Fatal error: [] operator not supported for strings".

Правильно так:
$v = 'Земля';
В результате переменная $v примет значение 'Земля'
Или вот так тоже правильно:
$v = $array;
$v[] =  'Земля';
В результате в переменную $v будет помещена копия массива $array из двух элементов 'яблоко' и 'цифра', а затем в массив $v будет добавлен третий элемент 'Земля'.

Сообщение отредактировал yury: 04 Октябрь 2015 - 22:05

  • 0

#11 Russlav

Russlav
    Topic Starter
  • Пользователь
  • 370 сообщений
  • Репутация: 18

Отправлено 05 Октябрь 2015 - 19:22

 

Правильно так: $v = 'Земля';В результате переменная $v примет значение 'Земля'

И выведется только слово Земля, а то, что в массиве удалится, так? Или я ошибаюсь?


  • 0

#12 yury

yury
  • Пользователь
  • 647 сообщений
  • Репутация: 192

Отправлено 05 Октябрь 2015 - 19:55

С массивом $array вообще ничего не случится. В этом случае, он нигде не изменяется. Меняется только переменная $v, которая все время была строкой, а не массивом.


  • 0

#13 fedornabilkin

fedornabilkin
  • Модератор
  • 1 152 сообщений
  • Репутация: 197

Отправлено 05 Октябрь 2015 - 23:11

@Russ33, Тебе надо бы поупражняться с массивами и особенно с многомерными, что бы воображение потренировать.


  • 1

Надо обсудить предложение. А тут знакосчиталка считает знаки. Про Yii2 написано.



#14 Russlav

Russlav
    Topic Starter
  • Пользователь
  • 370 сообщений
  • Репутация: 18

Отправлено 08 Октябрь 2015 - 19:15

У меня почему-то не создаются многомерные массивы, вот код:

 

$array = (
  array = ['dd', 'hh', 'jj'];
);
Почему он не работает?

  • 0

#15 ShowPrint

ShowPrint
  • Пользователь PRO
  • 3 316 сообщений
  • Репутация: 929

Отправлено 08 Октябрь 2015 - 19:47

Почему он не работает?

Если прочесть попытаться понять всё что Вам писали выше, то по всей видимости надо так:

$array = [ ['dd', 'hh', 'jj'] ];
Нэ?
 
Еще одна песочница: https://eval.in/447153

Сообщение отредактировал ShowPrint: 08 Октябрь 2015 - 19:54

  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#16 jytyx

jytyx
  • Неактивные
  • 52 сообщений
  • Репутация: 25

Отправлено 09 Октябрь 2015 - 12:25

$array = ( array = ['dd', 'hh', 'jj']; );

если на этом этапе возникают такие вопросы, то потом будут у Вас очень большие проблемы. Всегда будут возникать ошибки и основная задача научиться их решать самому, потому как на специализированных форумах по большей части с вашими будущими ошибками (когда пойдут сложный вещи, фреймворки, архитектура) не сталкивались, много времени тратить на решение их никто не будет (времени всегда мало) и в нюансы вашего случая тоже особо вникать никто не будет, а поэтому даже как бы успешное решение задачи может принести вам больше проблем чем пользы. Вопросы безопасности - исключение, тут лучше побольше мнений..

В данном случае:

1. Открыть доки, попробовать повторить все от и до.

2. Взять рабочий пример из доков и заменять его части постепенно на нерабочий свой, смотря на ошибки и когда код перестанет работать.

3. Взять нерабочий свой пример и заменять его части на рабочий пример из доков.

4. Использовать редактор с подсветкой ошибок или ide.

5. Для тренировки можно написать свой простенький класс\функции для работы с массивами - создать, добавить, изменить, проверить, удалить, распечатать и т.д

Такие вопросы на самом начальном этапе явно говорят, что обучаетесь вы неправильно.


  • 3

#17 Russlav

Russlav
    Topic Starter
  • Пользователь
  • 370 сообщений
  • Репутация: 18

Отправлено 09 Октябрь 2015 - 21:41

Такие вопросы на самом начальном этапе явно говорят, что обучаетесь вы неправильно.
 

Просто я смотрел курс о массивах в php версии 5.5.


Если прочесть попытаться понять всё что Вам писали выше, то по всей видимости надо так: $array = [ ['dd', 'hh', 'jj'] ]; Нэ?
 

Спасибо! Работает. :)


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Похожие темы

  Название темы Автор Статистика Последнее сообщение

Оформление форума – IPBSkins.ru