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



Создал массив. Не работает код

#1 Russlav

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

Отправлено 16 Сентябрь 2015 - 15:57

Когда я создаю массив, например:

 

$array = [
     '1.' => "Дерево",
     '2.' =>  "Куст",
     '3.' => "Трава",
     '4.' =>  "Овощи"
 ];
И пытаюсь вывести этим:
echo $array;
Код не работает. Работает лишь так:
foreach($array as $t=>$ms){
 echo "$t $ms<br >";
 };

Почему? :wacko:

 


 

 

  • 0

#2 jytyx

jytyx
  • Пользователь
  • 52 сообщений
  • Репутация: 25

Отправлено 16 Сентябрь 2015 - 16:57

Эм, ну это ведь разные структуры данных. Вы же получаете Notice - предупреждение при попытке его вывести, или у вас ошибки не включены. Кстати, во втором (правильном) случае тоже можно нарваться на это - если в значении $ms будет снова массив вместо строки.

Сообщение отредактировал jytyx: 16 Сентябрь 2015 - 16:57

  • 0

#3 miketomlin

miketomlin
  • Пользователь
  • 261 сообщений
  • Репутация: 35

Отправлено 16 Сентябрь 2015 - 17:30

Почему?
По определению. Хотите выводить массив без лишних телодвижений, используйте var_dump().
  • 1

#4 Russlav

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

Отправлено 17 Сентябрь 2015 - 05:54

По определению. Хотите выводить массив без лишних телодвижений, используйте var_dump().
 

Пробовал, выводит не так, как надо. -_-

или у вас ошибки не включены.

Видимо да, раз у меня открывается просто белый экран. А как их включить?

во втором (правильном)

Получается, пока не поместишь массив в какую-нибудь переменную - его использовать нельзя, да?


  • 0

#5 Info-Mans

Info-Mans
  • Пользователь
  • 1 175 сообщений
  • Репутация: 111

Отправлено 17 Сентябрь 2015 - 07:19

Если вам надо вывести значение из массива, необходимо напрямую обращаться к нему
echo $array[1.] и так далее

Есть еще вариант просмотра, что у вас в массиве var_damp или print_r

И ваш вариант с помощью foreach

Сообщение отредактировал Info-Mans: 17 Сентябрь 2015 - 07:21

  • 0

»»» Начни изменять свою жизнь с внешнего вида «««
        Буду рад вашим комментариям на блоге!



#6 jytyx

jytyx
  • Пользователь
  • 52 сообщений
  • Репутация: 25

Отправлено 17 Сентябрь 2015 - 07:31

Видимо да, раз у меня открывается просто белый экран. А как их включить?

если сервер боевой, то не стоит каждому встречному давать инфу, можно что-то вроде

$debugHost = '127.0.0.1';
//хотя говорят, что при наличии пряых рук его можно подделать
if ($_SERVER['REMOTE_ADDR'] === $debugHost) {
    error_reporting(-1);
}

или через http://php.net/manua...or-get-last.php

 

 

 

Получается, пока не поместишь массив в какую-нибудь переменную - его использовать нельзя, да?

не только в переменную, например

echo [1 => "бла", 2=> "бла-бла"][1]; //бла

function returnArray()
{
    return [1 => "бла", 2 => "бла-бла"];
}
echo returnArray()[1]; //бла

или в какой файл настроек settings.php включить

<?php

return [
    "debugmode" => true,
];

и

$settings = require_once 'settings.php';
var_dump($settings);

хотя это как бы в переменную, но неочевидно.

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

А вообще http://php.net/manua...types.array.php делайте по образцу, нотация квадратных скобок с 5.4

 

UPD. Да, имейте ввиду, что при всех проверках потом придется еще проверять на instanceof \Traversable или \ArrayAccess, ибо вместо массива удобно гонять объекты, так что не советую распылять по коду простые проверки, лучше все инкапсулировать в функции\методы объектов и не дублировать себя.


Сообщение отредактировал jytyx: 17 Сентябрь 2015 - 07:50

  • 1

#7 Russlav

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

Отправлено 17 Сентябрь 2015 - 14:01

Если вам надо вывести значение из массива, необходимо напрямую обращаться к нему echo $array[1.] и так далее Есть еще вариант просмотра, что у вас в массиве var_damp или print_r И ваш вариант с помощью foreach

Понятно.

если сервер боевой, то не стоит каждому встречному давать инфу, можно что-то вроде $debugHost = '127.0.0.1'; //хотя говорят, что при наличии пряых рук его можно подделать if ($_SERVER['REMOTE_ADDR'] === $debugHost) { error_reporting(-1); } или через http://php.net/manua...or-get-last.php

Спасибо за ссылочку. 


  • 0

#8 jytyx

jytyx
  • Пользователь
  • 52 сообщений
  • Репутация: 25

Отправлено 04 Ноябрь 2015 - 22:42

если сервер боевой, то не стоит каждому встречному давать инфу, можно что-то вроде

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

$_SERVER['REMOTE_ADDR'] - не надо так делать. При доступе через cli будет не найден ключ. проверить через isset.

error_reporting -  не трогать (хотя смотря какая система). Трогать нужно display_errors, что-то типа

 

switch ($environment) {
    case 'development':
        ini_set('display_errors', 1);
        break;
    case 'production':
        ini_set('display_errors', 0);
        break;
    default:
        header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
        echo 'The application environment is not set correctly.';
        exit(1);  //тут уж от вкусов или отлуп, исключение и т.д.


  • 0

robot

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


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