Xpoint
   [напомнить пароль]

Привидение к типу

Метки: [без меток]
[закрыта][удл]
2009-03-24 22:35:31 [обр] Александр Петров(2/4)[досье]

Здравствуйте, прошу совета
Имею массив MyArr возвращенный parse_ini_file:

Array
(
    [imap] => Array
        (
            [server] => imap.gmail.com
            [port] => 993
            [user] => p@gmail.com
            [ssl] => 1
        )

    [smtp] => Array
        (
            [server] => smtp.gmail.com
            [port] => 587
            [user] => p@gmail.com
            [tls] => 1
        )

    [directory] => Array
        (
            [in] => D:/in
            [out] => D:/out
        )

)

gettype($MyArr['imap']['port']) упорно утверждает что все значения string, хотя как видите там и числа есть и булевы. Я понимаю так работает сама функция parse_ini_file. Есть идея перебрать все ключи, попытаться привести значение к типу (пока не думал как, но кажется такой функционал заложен) и вернуть на место уже в новом типе. Может есть более быстрое и красивое решение?

спустя 38 минут [обр] MiRacLe(47/77)[досье]
а какой смысл в этих магических пасах?
спустя 1 час 51 минуту [обр] triumvurat[досье]

С какой целью Вам понадобилось приводить строковую переменую port к типу int? Откуда вообще такое желание и чем продиктовано это стремление?

PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присвоите строковое значение переменной $var , $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом.

http://www.php.net/manual/ru/language.types.type-juggling.php

спустя 9 часов [обр] Александр Петров(2/4)[досье]
Мужики дело в том, что потом это будет передано через XMLRPC. В клиенте будет построен редактор этого ini файла, если boolean то ufkjxre рисовать.....
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
 <param>
  <value>
   <struct>
    <member>
     <name>imap</name>
     <value>
      <struct>
       <member>
        <name>server</name>
        <value>
         <string>imap.gmail.com</string>
        </value>
       </member>
       <member>
        <name>port</name>
        <value>
         <string>993</string>
        </value>
       </member>
       <member>
        <name>user</name>
        <value>
         <string>petavrus@gmail.com</string>
        </value>
       </member>
       <member>
        <name>ssl</name>
        <value>
         <string>1</string>
        </value>
       </member>
      </struct>
     </value>
    </member>
    <member>
     <name>smtp</name>
     <value>
      <struct>
       <member>
        <name>server</name>
        <value>
         <string>smtp.gmail.com</string>
        </value>
       </member>
       <member>
        <name>port</name>
        <value>
         <string>587</string>
        </value>
       </member>
       <member>
        <name>user</name>
        <value>
         <string>petavrus@gmail.com</string>
        </value>
       </member>
       <member>
        <name>tls</name>
        <value>
         <string>1</string>
        </value>
       </member>
      </struct>
     </value>
    </member>
    <member>
     <name>directory</name>
     <value>
      <struct>
       <member>
        <name>in</name>
        <value>
         <string>D:/in</string>
        </value>
       </member>
       <member>
        <name>out</name>
        <value>
         <string>D:/out</string>
        </value>
       </member>
      </struct>
     </value>
    </member>
   </struct>
  </value>
 </param>
</params>
</methodResponse>
спустя 29 секунд [обр] Александр Петров(2/4)[досье]
ufkjxre = галочка (*опечатался)
спустя 28 минут [обр] MiRacLe(47/77)[досье]
  1. зачем нужен ini-файл ? кому-либо кроме вашего приложения он нужен?
  2. если ответ на первый вопрос положительный - ничего изящнее foreach вы не найдёте
  3. если отрицательный - забудьте про ini, сделайте человеческий config.php
  4. причём тут привИдения?
спустя 32 минуты [обр] Александр Петров(2/4)[досье]
MiRacLe[досье] Моя идея в следующем. Создать сервис который позволит визуально править ini файл. Работать это будет через RPC.
Что вы имеете под config.php
спустя 1 минуту [обр] Филипп Ткачев(20/112)[досье]
RPC для правки ini файла - смешно.
спустя 3 минуты [обр] Филипп Ткачев(20/112)[досье]
IMHO, для общения с сервером использовать JSON-структуры. Обратно передавать только измененные параметры.
Для приведения типов можно использовать array_map.
спустя 25 секунд [обр] Александр Петров(2/4)[досье]
сообщение промодерировано
Филипп Ткачев[досье], вот и посмейся. Это веб-приложение. RPC очень даже удобно для этого.
спустя 3 минуты [обр] Давид Мзареулян(536/1003)[досье]
сообщение промодерировано

$int_a = (int)$a;
или
$int_a = intval($a);

ПривЕдение — от слова «приводить». А привИдение — от слова «привидеться»…

спустя 1 минуту [обр] Александр Петров(2/4)[досье]
Филипп Ткачев[досье], array_map спасибо
спустя 24 секунды [обр] MiRacLe(47/77)[досье]
Александр Петров[досье] ну и зачем вы морочите нам мозги? если это правка файла (строки, большой, но строки) - передавайте строки.
спустя 1 минуту [обр] Александр Петров(2/4)[досье]
Спасибо всем я с вашей помощью кажется нашел решение array_map и калбек обработчик каждого элемента массива возвращать он будет уже приведенный тип
спустя 1 минуту [обр] Александр Петров(2/4)[досье]
MiRacLe[досье] к стате я вас не просил предлагать мне другую логику реализации этого, я лишь просил помочь найти логичное решение обработки каждого элемента массива
спустя 1 минуту [обр] Александр Петров(2/4)[досье]
Это часть приложения. Все приложение использует RPC и не вижу смысла для себя еще что-то придумыать. RPC отдает массив, RPC клиент его получает и смотрит какой тип у элемента массива, если булево то рисует галочку. И дальше в таком же духе
спустя 53 секунды [обр] Филипп Ткачев(20/112)[досье]
Александр Петров[досье], здесь лечат причины болезни, а не существующую патологию.
спустя 9 секунд [обр] Александр Петров(2/4)[досье]
Потом клиент собирает данные в массив и возвращает серверу, можно даже только измененные.
спустя 2 минуты [обр] Филипп Ткачев(20/112)[досье]
Александр Петров[досье], просто чтобы передать 10 байт, у вас 20 байт обвертки.
спустя 8 секунд [обр] Александр Петров(2/4)[досье]
Филипп Ткачев[досье], это что вы под патологией понимаете
спустя 1 минуту [обр] MiRacLe(47/77)[досье]
Александр Петров[досье] "к стате" поставьте себе spellchecker
спустя 16 секунд [обр] Александр Петров(2/4)[досье]
Александр Петров[досье], просто чтобы передать 10 байт, у вас 20 байт обвертки.
Я этим могу пожертвовать ради стандартизации. Можно RPC Json использовать. А можно сидкть свои стандарты придумывать
спустя 1 минуту [обр] Александр Петров(2/4)[досье]
Александр Петров[досье] "к стате" поставьте себе spellchecker
Обязательно, а то так злюсь, что на ошибки внимание не обращаю.
спустя 4 минуты [обр] MiRacLe(47/77)[досье]
М злитесь в блокнот.exe
Powered by POEM™ Engine Copyright © 2002-2005