0

我是新手,有人能帮帮我吗?

我有一个数组

array(2) {
 ["Peter"]=>
  object(stdClass)#504 (2) {
    ["id"]=>
    string(4) "2226"
    ["name"]=>
     string(4) "Peter"
   }
 ["Sam"]=>
  object(stdClass)#505 (2) {
    ["id"]=>
    string(4) "2227"
    ["name"]=>
    string(14) "Sam"
   }
}

我想从“id”列中获取元素,然后放入 sql 中进行循环

$idcol = array()
foreach($info as $item){
$idcol[] = $item['id'];
}

但我不知道为什么我不能得到 id 列。

对于Looping,如何将$idcol的数组元素放入sql中?get_sql 是一个函数

 for($i=0;$i<count($idcol);$i++){
 $rate = get_sql($idcol);
 }
4

6 回答 6

2

您无法访问数组中的值的原因是详细信息存储为对象,因此您需要使用箭头运算符'->'来访问这些值。所以你可以试试下面的代码:

$idcol = array()
foreach($info as $person_details)
{
    $id = $person_details->id;
    $person_name = $person_details->name;
    $idcol[] = $id;
}
于 2013-10-04T04:41:56.793 回答
1

当您遍历时$info$item您有对象,而不是数组。所以你需要调用它$item->id

如果get_sql()只接受一个 id 你需要做类似的事情

foreach ($idcol as $id){
    $rate = get_sql($id);
}

但在循环内查询 SQL 总是不好的主意。考虑将您的 SQL 查询更改为类似

SELECT * from `table` where `id` IN (1, 2, 3);

比您一次检索所有数据。但是,如果您仍然想调用函数,则不需要两个循环。把所有的事情都做一个。

$idcol = array()
foreach($info as $item){
  $rate = get_sql($item->id);
}

但请注意,该速率将在每次迭代中重写。因此,您需要将数据收集到数组$rate[] = get_sql($item->id);中,或者像打印一样立即处理该数据。

于 2013-10-04T04:37:12.627 回答
0

假设$info是开头提到的数组,每个$item都是对象,不是数组。所以你应该尝试:

foreach($info as $item){
    $idcol[] = $item->id;
}
于 2013-10-04T04:41:36.327 回答
0

您还可以使用array_map来获取 id:

$idcol = array_map(function($item){return $item->id;},$info);

然后您可以使用foreach循环将值发送到您的函数(尽管最好让您的函数与数组一起使用以避免多次查询):

foreach($idcol as $id){
    $rate = get_sql($id);
}

当前循环不起作用的原因是因为您正在发送整个数组而不是使用像$idcol[i]

于 2013-10-04T04:51:32.533 回答
-1
 $idcol = array()
 foreach($info as $item=>$val)
 {
    $idcol[] = $val['id'];
 }
于 2013-10-04T04:41:06.650 回答
-1

array_column — 返回输入数组中单列的值

语法说明

array array_column ( array $array , mixed $column_key [, mixed $index_key = null ] )

array_column() 从数组的单个列中返回值,由 column_key 标识。或者,您可以提供一个 index_key 来通过输入数组中 index_key 列中的值对返回数组中的值进行索引。

例子:

<?php
// Array representing a possible record set returned from a database
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);

$first_names = array_column($records, 'first_name');
print_r($first_names);
?>

从记录集中获取姓氏列,由“id”列索引

<?php
// Using the $records array from Example #1
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
?>
于 2013-10-04T04:33:28.253 回答