Обход нечисловых индексов массива - PullRequest
1 голос
/ 14 апреля 2011

Думаю, мне не хватает основной концепции.Я хочу генерировать HTML, просматривая несколько различных массивов данных.Они не используют числа в качестве индексов, поэтому числовые циклы не работают.Я также не могу понять, как использовать foreach() здесь.Как мне пройти $price и $description, если индексы не являются числами?

Образец:

$traverser= 0;
while($traverser < $number_of_records)
{
    print $traverser . " - " . $price[$traverser] . "<br />";
    print $description[$traverser];
    $traverser++;
}

Частичный образец структуры массива:

object(phpQueryObject)#2799 (13) { ["documentID"]=>  string(32) "1d62be942498df890cab4ccb78a007a2" ["document"]=>  &object(DOMDocument)#3 (0) { } ["charset"]=>  &string(5) "utf-8" ["documentWrapper"]=>  &object(DOMDocumentWrapper)#2 (17) { ["document"]=>  &object(DOMDocument)#3 (0) { } ["id"]=>  string(32) "1d62be942498df890cab4ccb78a007a2" ["contentType"]=>  string(9) "text/html" ["xpath"]=>  &object(DOMXPath)#4 (0) { } ["uuid"]=>  int(0) ["data"]=>  array(0) { } ["dataNodes"]=>  array(0) { } ["events"]=>  array(0) { } ["eventsNodes"]=>  array(0) { } ["eventsGlobal"]=>  array(0) { } ["frames"]=>  array(0) { } ["root"]=>  &object(DOMElement)#5 (0) { } ["isDocumentFragment"]=>  &bool(true) ["isXML"]=>  bool(false) ["isXHTML"]=>  bool(false) ["isHTML"]=>  bool(true) ["charset"]=>  &string(5) "utf-8" } ["xpath"]=>  &object(DOMXPath)#4 (0) { } ["elements"]=>  array(560) { [0]=>  object(DOMElement)#2239 (0) { } [1]=>  object(DOMElement)#2240 (0) { } [2]=>  object(DOMElement)#2241 (0) { } [3]=>  object(DOMElement)#2242 (0) { } [4]=>  object(DOMElement)#2243 (0) { } [5]=>  object(DOMElement)#2244 (0) { } [6]=>  object(DOMElement)#2245 (0) { } [7]=>  object(DOMElement)#2246 (0) { } [8]=>  object(DOMElement)#2247 (0) { }

Ответы [ 3 ]

2 голосов
/ 14 апреля 2011

Поскольку, похоже, вам также нужны ключи массива, так как вы ссылаетесь на несколько разных массивов, вам нужен синтаксис $a as $k => $v для foreach:

foreach($description as $key => $desc)
{
    print $key . " - " . $price[$key] . "<br />";
    print $desc;
}
1 голос
/ 14 апреля 2011

Вы можете сделать свой снимок относительно того, как вы хотите их итерировать:

<?php

  $ary = array(   // demo array
    'apple' => 'Apple',
    'orange' => 'Orange',
    'grape' => 'Grape'
  );

  // show the structure
  var_dump($ary); echo "\r\n";

  // use a foreach with the key and value
  foreach ($ary as $key => $val)
    printf("%s => %s\r\n", $key, $val);
  echo "\r\n";

  // just get the raw keys
  $keys = array_keys($ary);
  var_dump($keys); echo "\r\n";

вывод:

array(3) {
  ["apple"]=>
  string(5) "Apple"
  ["orange"]=>
  string(6) "Orange"
  ["grape"]=>
  string(5) "Grape"
}

apple => Apple
orange => Orange
grape => Grape

array(3) {
  [0]=>
  string(5) "apple"
  [1]=>
  string(6) "orange"
  [2]=>
  string(5) "grape"
}

Всегда есть array_map & array_walk.

0 голосов
/ 14 апреля 2011

Я не уверен, что получаю вопрос, но это действительно так просто:

<?php
$array = array('foo', 'bar');
foreach ($array as $element) {
    echo "{$element}\n";
}

Это должно вывести "foo" и "bar".

...