2012-08-27 73 views
0

我正在嘗試獲取分配給數組元素的id值。我遇到的問題是它將通過foreach每70個循環分配一個ID。我不太確定我在做這件事時做錯了什麼。未在foreach循環中分配數組元素

$search = 'echem'; 
$data = array(); 
$tags = null; 
$i = 0; 
//var_dump($this->videos); 
foreach ($this->videos as $key => $value) { 
    foreach ($value as $key => $value) { 
     if ($key === 'id') { 
      $data[$i]['id'] = (int)$value; 
     } 
     if ($key == 'tags') { 
      $tags = explode(',', $value); 
     } 
     //echo $key . ' - '; 
     if (is_array($tags)) { 
      foreach ($tags as $key => $value) { 
       if (strtoupper($value) == strtoupper($search)) { 
        //echo 'Search Found <br/>'; 
        $data[$i]['found'] = 1; 
       } 
       //echo $value.', '; 
      } 
      //echo '<br/>'; 
     } 
     if (!isset($data[$i]['found'])) { 
      $data[$i]['found'] = 0; 
     } 
     $data[$i]['subId'] = $i; 
     $i++; 
    } 
} 

你可以看到即時檢查,看看是否$鍵是ID上線8用下面的代碼:

if ($key === 'id') { 
    $data[$i]['id'] = (int)$value; 
} 

然後我通過循環的其餘部分出現運行貫穿很好,根據需要分配一切。密鑰ID是每個循環中的第一個密鑰,所以爲什麼不分配它使我陷入困境。任何幫助深表感謝。

輸出的var_dump():

array (size=58086) 
    0 => 
    array (size=3) 
     'id' => int 1 
     'found' => int 0 
     'subId' => int 0 
    1 => 
    array (size=2) 
     'found' => int 0 
     'subId' => int 1 
    2 => 
    array (size=2) 
     'found' => int 0 
     'subId' => int 2 
    3 => 
    array (size=2) 
     'found' => int 0 
     'subId' => int 3 
    4 => 
    array (size=2) 
     'found' => int 0 
     'subId' => int 4 
    5 => 
    array (size=2) 
     'found' => int 1 
     'subId' => int 5 
    6 => 
    array (size=2) 
     'found' => int 0 
     'subId' => int 6 
    7 => 
    array (size=2) 
     'found' => int 0 
     'subId' => int 7 
+0

是什麼'的var_dump($數據)'後'foreach'生產? – Matt

+1

在這種情況下它不會造成問題,但是您不應該在嵌套的foreach循環中覆蓋'$ value'。 – Matt

+4

你所有的三個foreach循環都使用'$ key => $ value' - 這有點令人困惑。你應該給他們不同的名字,以使維護你的代碼更容易。 – andrewsi

回答

3

我有點無聊,所以我重寫代碼:

  1. 我已經改名爲as $key => $value更明智的名字。

  2. 我已經刪除了中間的foreach循環,因爲一個簡單的數組引用和isset()就足夠了。

  3. 在循環開始之前應用strtoupper()$search(避免多次執行此操作)。

結果:

$search = 'echem'; 
$data = array(); 

$i = 0; 
$search = strtoupper($search); 

foreach ($this->videos as $video) { 
    if (!isset($video['id'], $video['tags'])) { 
     continue; // skip records you can't use 
    } 
    // populate the `$data` entry 
    $data[$i]['id'] = $video['id']; 
    $data[$i]['tags'] = explode(',', $video['tags']); 

    // find a match in the tags 
    $data[$i]['found'] = 0; 
    foreach ($data[$i]['tags'] as $tag) { 
     if (strtoupper($tag) == $search) { 
      $data[$i]['found'] = 1; 
     } 
    } 
    $data[$i]['subId'] = $i; 
    $i++; 
} 
+0

你在循環開始之前忘了'$ i = 0;' – Mahn

+0

@Mahn那不是全部:)更新 –

相關問題