2013-10-04 44 views
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列。

對於循環,如何把$ idcol的數組元素放入sql中? get_sql是一個函數

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

回答

-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); 
?> 
+0

我不知道爲什麼我使用array_column時不能得到任何東西 – user2210819

+1

array_column無法使用,因爲在不是數組。 – Yaroslav

1

索引的列當您通過$info$item迭代你有對象,而不是一個數組。 所以,你需要調用它$item->id

如果get_sql()只接受一個I​​D,你需要做的是這樣

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);這樣的數組,或者立即處理該數據以便打印它。

+0

謝謝! 你能解決我第二個問題關於循環 – user2210819

+0

解決你的第二個問題,我需要知道現在出了什麼問題,或者你得到的任何錯誤或功能期望的參數。 – Yaroslav

+0

我更新了關於第二部分的答案。 – Yaroslav

-1
$idcol = array() 
foreach($info as $item=>$val) 
{ 
    $idcol[] = $val['id']; 
} 
+0

'$ val'是Object,而不是數組。 – Yaroslav

0

假設$info是在開頭提到的陣列,每個$item是一個對象,而不是陣列。所以,你應該嘗試:

foreach($info as $item){ 
    $idcol[] = $item->id; 
} 
2

的原因,你不能訪問值形成的數組是細節存儲爲對象,所以你需要使用箭頭操作符「 - >」進入電影的值。所以,你可以試試下面的代碼:

$idcol = array() 
foreach($info as $person_details) 
{ 
    $id = $person_details->id; 
    $person_name = $person_details->name; 
    $idcol[] = $id; 
} 
+0

謝謝!那麼我應該何時使用$ person_details ['id']? – user2210819

0

您還可以使用array_map獲得的ID:

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

然後你可以使用一個foreach循環的值發送到你的函數(儘管它將是最好的,如果你能與你的陣列功能的工作,以避免重複查詢):

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

你的電流回路不工作的原因是因爲你發送整個陣列,而不是使用像索引$idcol[i]