X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Туплю с массивом, помогите
Den1xxx
Den1xxx
Topic Starter сообщение 8.10.2012, 11:24; Ответить: Den1xxx
Сообщение #1


Создаю массивы типа такого
[PHP]array(6=>"Комсомольская",7=>"Ленина");[/PHP]
Мне надо чтобы ключ "6" воспринимался как string.
А он воспринимается как число!
Даже если создается так:
[PHP]$items[(string)$item['id']] = $item['name'];[/PHP]
Что PHP скотина хочет?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 8.10.2012, 11:28; Ответить: alexdrob
Сообщение #2


А может лучше скажите зачем такое нужно? В пхп нет жёских типов, какая разница число это или строка?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 8.10.2012, 11:32; Ответить: alexdrob
Сообщение #3


http://php.net/manual/ru/language.types.array.php
Дополнительно с ключом key будут сделаны следующие преобразования:

Строки, содержащие целое число будут преобразованы к типу integer. Например, ключ со значением "8" будет в действительности сохранен со значением 8. С другой стороны, значение "08" не будет преобразовано, так как оно не является корректным десятичным целым.
Числа с плавающей точкой (тип float) также будут преобразованы к типу integer, т.е. дробная часть будет отброшена. Например, ключ со значением 8.7 будет в действительности сохранен со значением 8.
Тип bool также преобразовываются к типу integer. Например, ключ со значением true будет сохранен со значением 1 и ключ со значением false будет сохранен со значением 0.
Тип null будет преобразован к пустой строке. Например, ключ со значением null будет в действительности сохранен со значением "".
Массивы (тип array) и объекты (тип object) не могут использоваться в качестве ключей. При подобном использовании будет генерироваться предупреждение: Недопустимый тип смещения (Illegal offset type).
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
Topic Starter сообщение 8.10.2012, 11:38; Ответить: Den1xxx
Сообщение #4


(alexdrob @ 8.10.2012, 14:28) *
А может лучше скажите зачем такое нужно?

Чтобы порядок следования элементов в массиве не менялся.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
Topic Starter сообщение 8.10.2012, 11:46; Ответить: Den1xxx
Сообщение #5


Блин, почитал спасибо. Долбаный PHP который не спрашивает что делает, нельзя написать "1"=>"Щито?", это обязательно получится 1=>"Щито?"
То есть это будет уже не ключ а индекс!
И никакие strval, (string) и т.п. не помогают.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 8.10.2012, 12:24; Ответить: r3ntg3n
Сообщение #6


Не надо катить бочку на php. Это стандартное поведение массива. Понятие массив предопределяет, что у вас в качестве идентификатора элемента используется его индекс.
(Den1xxx @ 8.10.2012, 14:38) *
Чтобы порядок следования элементов в массиве не менялся.

А вы думаете, что если стока заменится числом, то у вас изменится порядок следование элементов?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
Topic Starter сообщение 8.10.2012, 13:10; Ответить: Den1xxx
Сообщение #7


(r3ntg3n @ 8.10.2012, 15:24) *
если стока заменится числом, то у вас изменится порядок следование элементов

Разумеется.
$x=array("1"=>"2"); - предполагается строка "1" соответствует "2"
А на самом деле при создании массива "1" - это уже не строка, а целое число, индекс массива.
$x[1] = "2", а мной предполагалось логичное поведение $x[0] = "2".
То есть : $x["1"]=$x[0]="2";//это если бы в действиях интерпретатора была логика
Если бы PHP воспринимал бы 1 как строку, это был бы нулевой элемент ассоциированного массива.
Ну да ладно, фиг с ним, просто буду иметь в виду.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 8.10.2012, 15:07; Ответить: r3ntg3n
Сообщение #8


(Den1xxx @ 8.10.2012, 16:10) *
$x=array("1"=>"2"); - предполагается строка "1" соответствует "2"

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

(Den1xxx @ 8.10.2012, 16:10) *
$x[1] = "2", а мной предполагалось логичное поведение $x[0] = "2".
То есть : $x["1"]=$x[0]="2";//это если бы в действиях интерпретатора была логика

Извините, но я в ваших размышлениях не вижу логики. Вы сами четко указали, что у вас ключу 1 должно соответствовать значение 2. В чем тут просматривается отсутствие логики? В том, что хотя массив и пустой, у вас элемент добавиться с индексом отличным от нуля? Ну, так добавляйте его как [PHP]$x[] = 2;[/PHP] ему автоматически присвоится следующий незанятый индекс. Вы хотите сказать, что люди, которые пишут языки программирования, ошибаются?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 8.10.2012, 17:39; Ответить: alexdrob
Сообщение #9


Я всё равно ен понимаю зачем обращатся по числовому ключу, то етсь по 0, к первому элементу массива, ключ у которого, пусть даже была бы строка '1'?

Ну надо вам именно первый элемент вытащить, так юзайте
http://www.php.net/manual/ru/control-structures.foreach.php
http://www.php.net/manual/ru/function.array-shift.php
http://www.php.net/manual/ru/function.array-slice.php
http://www.php.net/manual/ru/function.current.php
http://www.php.net/manual/ru/function.next.php
http://www.php.net/manual/ru/function.prev.php
http://www.php.net/manual/ru/function.list.php

Я думаю этих функций хватит для навигации по массиву не по ключам.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
Topic Starter сообщение 8.10.2012, 23:38; Ответить: Den1xxx
Сообщение #10


(r3ntg3n @ 8.10.2012, 18:07) *
Вы хотите сказать, что люди, которые пишут языки программирования, ошибаются?

Именно это и происходит. Понимаете, если люди -- это люди, то они могут ошибаться и ошибаются.
Я свою задачу уже решил. Но не совсем понятна логика — почему все-таки НЕВОЗМОЖНО преобразовать число в строку?
Жестко задать тип?

Или Вы считаете что много логики в таких действиях интерпретатора PHP:
(alexdrob @ 8.10.2012, 14:32) *
Например, ключ со значением 8.7 будет в действительности сохранен со значением 8.

Серьёзно?

PS.
Задачу свою решил конечно же.
Но осадочек остался.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 692 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) Помогите рещить проблему с монитором.
Почему низкое разрешение при подключении монитора через displayport?
0 Levels 1695 11.12.2020, 0:48
автор: Levels
Открытая тема (нет новых ответов) Помогите кто нибудь получить партнерку Росбанк!
7 heisenberg_mw 2315 7.8.2020, 9:28
автор: heisenberg_mw
Открытая тема (нет новых ответов) Помогите найти тему пожалуйста
7 virtas 12402 24.7.2020, 17:02
автор: -JamesSmips-
Открытая тема (нет новых ответов) Помогите с поиском доноров
3 tehno_music 3332 4.11.2019, 17:15
автор: goblin78


 



RSS Текстовая версия Сейчас: 29.3.2024, 2:58
Дизайн