0

配列要素に割り当てられた id の値を取得しようとしています。私が抱えている問題は、foreach を介して 70 ループごとに 1 つの ID を割り当てることです。これで何が間違っているのかよくわかりません。

$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++;
    }
}

ご覧のとおり、次のコードを使用して、8行目で $key が id であるかどうかを確認しています。

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
4

1 に答える 1

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++;
}
于 2012-08-27T19:05:25.157 に答える