SimpleXMLElement to PHP Array [дубликат]

Комментарий в одном из других ответов упоминал режим cbreak, который важен для реализаций Unix, потому что вы, как правило, не хотите, чтобы ^ C (KeyboardError) потреблялся getchar (как и при установке терминала на raw mode, как это сделано большинством других ответов).

Еще одна важная деталь: если вы хотите прочитать один символ , а не один байт , вы должны прочитать 4 байта из входного потока, так как это максимальное количество байтов, которое будет содержать один символ в UTF-8 (Python 3+). Чтение только одного байта приведет к неожиданным результатам для многобайтовых символов, таких как стрелки клавиатуры.

Вот моя измененная реализация для Unix:

import contextlib
import os
import sys
import termios
import tty


_MAX_CHARACTER_BYTE_LENGTH = 4


@contextlib.contextmanager
def _tty_reset(file_descriptor):
    """
    A context manager that saves the tty flags of a file descriptor upon
    entering and restores them upon exiting.
    """
    old_settings = termios.tcgetattr(file_descriptor)
    try:
        yield
    finally:
        termios.tcsetattr(file_descriptor, termios.TCSADRAIN, old_settings)


def get_character(file=sys.stdin):
    """
    Read a single character from the given input stream (defaults to sys.stdin).
    """
    file_descriptor = file.fileno()
    with _tty_reset(file_descriptor):
        tty.setcbreak(file_descriptor)
        return os.read(file_descriptor, _MAX_CHARACTER_BYTE_LENGTH)
20
задан Alessio Cantarella 4 February 2019 в 17:25
поделиться

2 ответа

$ answer уже может работать как массив. Вы можете сделать это, если хотите поместить его в реальный массив,

$array = array();
foreach($answer as $k => $v) {
  $array[$k] = $v;
}
10
ответ дан 29 November 2019 в 06:08
поделиться

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

$my_array = (array)$answer
51
ответ дан 29 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: