Массив и foreach

Используя -u работы переключателя командной строки, но это немного неуклюже. Это означало бы, что программа потенциально вела бы себя неправильно, если бы пользователь вызвал сценарий без -u опция. Я обычно использую пользовательское stdout, как это:

class flushfile:
  def __init__(self, f):
    self.f = f

  def write(self, x):
    self.f.write(x)
    self.f.flush()

import sys
sys.stdout = flushfile(sys.stdout)

... Теперь весь Ваш print вызовы (которые используют sys.stdout неявно), будет автоматически flush редактор

5
задан 21 July 2009 в 08:12
поделиться

3 ответа

foreach берет каждый элемент массива и присваивает его переменной. Чтобы получить результаты, я предполагаю, что вы ожидаете, что вам просто нужно сделать:

foreach ($posts as $post) {
   echo $post;
}

Особенности того, почему ваш код не работал: $ post будет содержимым элемента массива - в данном случае строка. Поскольку PHP не является строго типизированным / поддерживает манипулирование типами, вы можете работать со строкой, как если бы это был массив, и переходить к каждому символу в последовательности:

foreach ($posts as $post) {
    echo $post[0]; //'t'
    echo $post[1]; //'h'
}

Очевидно $ post ['message'] , следовательно, не является допустимым элементом, и нет явного преобразования из (строка) 'message' в int , так что это эквивалентно $ post [0] .

12
ответ дан 18 December 2019 в 07:10
поделиться
# $posts is an array with one index ('message')
$posts = array(
    "message" => 'this is a test message'
);

# You iterate over the $posts array, so $post contains
# the string 'this is a test message'
foreach ($posts as $post) {
    # You try to access an index in the string.
    # Background info #1:
    #   You can access each character in a string using brackets, just
    #   like with arrays, so $post[0] === 't', $post[1] === 'e', etc.
    # Background info #2:
    #   You need a numeric index when accessing the characters of a string.
    # Background info #3:
    #   If PHP expects an integer, but finds a string, it tries to convert
    #   it. Unfortunately, string conversion in PHP is very strange.
    #   A string that does not start with a number is converted to 0, i.e.
    #   ((int) '23 monkeys') === 23, ((int) 'asd') === 0,
    #   ((int) 'strike force 1') === 0
    # This means, you are accessing the character at position ((int) 'message'),
    # which is the first character in the string
    echo $post['message'];
}

Возможно, вам нужно следующее:

$posts = array(
    array(
        "message" => 'this is a test message'
    )
);
foreach ($posts as $post) {
    echo $post['message'];
}

Или это:

$posts = array(
    "message" => 'this is a test message'
);
foreach ($posts as $key => $post) {
    # $key === 'message'
    echo $post;
}
6
ответ дан 18 December 2019 в 07:10
поделиться

Я бы добавил к ответу iAn кое-что: если вы хотите как-то чтобы получить доступ к ключу значения, используйте это:

foreach ($posts as $key => $post) {
    echo $key . '=' . $post;
}

Результат:

message=this is a test message
4
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

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