2

所以我正在 print_r-ing 一个数组,生成如下:

while ($twitgroup = mysql_fetch_array($resulttwitter)) {
print_r($twitgroup);
}

我得到这个输出(有多个数组,取决于行)。

Array ( [0] => composed [category] => composed [1] => 330 [value] => 330 [2] => 1344384476.94 [timestamp] => 1344384476.94 ) Array ( [0] => elated [category] => elated [1] => 2034 [value] => 2034 [2] => 1344384476.94 [timestamp] => 1344384476.94 ) Array ( [0] => unsure [category] => unsure [1] => 2868 [value] => 2868 [2] => 1344384476.94 [timestamp] => 1344384476.94 ) Array ( [0] => clearheaded [category] => clearheaded [1] => 1008 [value] => 1008 [2] => 1344384476.94 [timestamp] => 1344384476.94 ) Array ( [0] => tired [category] => tired [1] => 2022 [value] => 2022 [2] => 1344384476.94 [timestamp] => 1344384476.94 ) 

我希望能够在这里提取个人价值观,但我遇到了麻烦。我正在尝试在这些数组上使用 while 循环,但我认为这可能是错误的。我是否应该使用 foreach 循环,然后在该 foreach 的输出上访问数组的每个元素?

比方说,我要抓取composition,以及committed 的值。我该怎么做?

我非常擅长 Python 中的数组/列表,但我在 PHP 中的数组经验有些欠缺。

4

4 回答 4

1

利用

while ($row = mysql_fetch_assoc($resulttwitter)) {
  $twitgroup[$row['category']] = $row;
}

echo $twitgroup['composed']['value'];     // outputs 330 
echo $twitgroup['composed']['timestamp']; // outputs 1344384476.94

如果你只想categories和他们的values使用

while ($row = mysql_fetch_assoc($resulttwitter)) {
  $twitgroup[$row['category']] = $row['value'];
}

echo $twitgroup['composed'];     // outputs 330 
于 2012-10-11T04:16:37.040 回答
0

替换mysql_fetch_arraymysql_fetch_assoc以消除重复项。然后这个:

while ($twitgroup = mysql_fetch_assoc($resulttwitter)) 
{
    foreach ($twitgroup as $key => $value)
    {
        echo "$key => $value\n";
    }
}

您还可以按名称获取元素:

while ($twitgroup = mysql_fetch_assoc($resulttwitter)) 
{
    echo "category => " . $twitgroup["category"] . "\n";
    echo "value => " . $twitgroup["value"] . "\n";
    echo "timestamp => " . $twitgroup["timestamp"] . "\n";
}
于 2012-10-11T03:55:12.187 回答
0

mysql_fetch_array 在结果中包含每个字段两次,一次与数字键相关联,另一次与字段名称相关联。

这就是为什么你有

   [0] => composed 
   [category] => composed
   [1] => 330 
   [value] => 330

您可以访问字段,例如:

  $twitgroup[0]

或喜欢:

  $twitgroup['category']

因此,您可以访问您的每一行,如:

  while ($twitgroup = mysql_fetch_array($resulttwitter)) {
          print $twitgroup['category']; // or print $twitgroup['0'];
          print $twitgroup['value']; // // or print $twitgroup['1'];

          // or by the corresponding numeric indices.

   }

如果您想将结果限制为数字或关联数组,请在 mysql_fetch_array 中添加一个附加标志(result_type):

   mysql_fetch_array ($resulttwitter, MYSQL_ASSOC) // or mysql_fetch_array ($resulttwitter, MYSQL_NUM)

说了这么多,强烈建议不要在 PHP 中使用 mysql_* 函数,因为它们已被弃用。您应该改用 mysqli 或 PDO。

于 2012-10-11T04:12:05.850 回答
0

这就是你所拥有的:

  大批 (
    [0] => 组成
    [类别] => 组成
    [1] => 330  
    [价值] => 330
    [2] => 1344384476.94
    [时间戳] => 1344384476.94
) 大批 (
    [] =>
    [] =>
    ...
) ...

PHP 中的数组称为关联数组,因为它们的键可以是整数、字符串或其他任何内容。您有一个包含数组的数组。

要访问各个字段,最方便的是使用 for each 循环。

$record=0;
foreach ($array as $k => $subArray) {
    $record++;
    foreach($subArray as $field => $value) {
        printf("%d: %s = %s\n", $record, $field, $value);
    }
}

在我看来,您获取数据的方式有问题,因为一半的字段似乎是多余的。您可以使用字符串键来找出内容。所以不需要 n => name 条目。

如果这无济于事,我想你可以迭代这些值

$ix=0;
for ($i=0; $i < (count($array)/2); $i++){
   printf("%s\n", $array[$ix]);
   $ix++;
}
于 2012-10-11T04:13:19.397 回答