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



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

#1 Russlav

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

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

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


 

 

  • 0

#2 yury

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

Отправлено 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
  • 2 159 сообщений
  • Репутация: 432

Отправлено 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
  • 2 159 сообщений
  • Репутация: 432

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

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

 

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

 

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


  • 0

#7 yury

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

Отправлено 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
  • 2 159 сообщений
  • Репутация: 432

Отправлено 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
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 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

robot

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


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