0

for()ステートメントでOR(||)演算子を使用する必要がありますが、期待どおりに機能していません。

4つの添付ファイルを送信します。2つはインライン画像で、他の2つは実際の添付ファイルです。

問題は、2つのインライン画像($ results ['Related'])のみをループしていることです。

私の解決策は非常に単純だと思いますが、私はそれを見ていません。

これが私のコードです:

# Check for attachments
if(isset($results['Related']) || isset($results['Attachments']))
{
    if(isset($results['Related']))
    {
        $attachment_type = $results['Related'];
    }
    elseif(isset($results['Attachments']))
    {
        $attachment_type = $results['Attachments'];
    }

    for($i = 0; ($i < count($results['Attachments']) || $i < count($results['Related'])); $i++)
    {
        # Format file name (change spaces to underscore then remove anything that isn't a letter, number or underscore)
        $filename = preg_replace('/[^0-9,a-z,\.,_]*/i', '', str_replace(' ', '_', $attachment_type[$i]['FileName']));

        /* LOTS MORE CODE HERE */
    }
}

編集:私はあなたに問題が何であったかを言うのを忘れました。

4

4 に答える 4

2

個別に行ってください。

if(isset($results['Related']) {
  foreach ($results['Related'] as &$el) {
    $el['FileName'] = preg_replace('/[^0-9,a-z,\.,_]*/i', '', str_replace(' ', '_', $el['FileName']));
  }
}

if(isset($results['Attachments']) {
  foreach ($results['Attachments'] as &$el) {
    $el['FileName'] = preg_replace('/[^0-9,a-z,\.,_]*/i', '', str_replace(' ', '_', $el['FileName']));
  }
}
于 2012-08-27T02:49:23.793 に答える
1

更新しました:

それを行うにはいくつかの方法がありますが、保守性と読みやすさのために、私はarray_walk()ベースのソリューションを使用します。

$doLotsOfStuff = function(&$el) {
    $el['FileName'] = preg_replace('/[^0-9,a-z,\.,_]*/i', '', str_replace(' ', '_', $el['FileName']));

    // Your other code goes here.
};

if (isset($results['Related'])) {
    array_walk($results['Related'], $doLotsOfStuff);
}

if (isset($results['Attachments'])) {
    array_walk($results['Attachments'], $doLotsOfStuff);
}

編集:

匿名関数をサポートしていない古いバージョンのPHPの場合、代わりに通常の関数を使用できます。

function doLotsOfStuff(&$el) {
    $el['FileName'] = preg_replace('/[^0-9,a-z,\.,_]*/i', '', str_replace(' ', '_', $el['FileName']));

    // Your other code goes here.
}

if (isset($results['Related'])) {
    array_walk($results['Related'], 'doLotsOfStuff');
}

if (isset($results['Attachments'])) {
    array_walk($results['Attachments'], 'doLotsOfStuff');
}
于 2012-08-27T03:11:57.077 に答える
0

カウントを合計する必要がありますか?

それぞれ2つ送ると言ったので、2であり、2でもあると思いますcount($results['Attachments'])count($results['Related'])その場合、最初の2回だけ実行されます。

次のようなものが必要なようです。

# Check for attachments
if(isset($results['Related']) || isset($results['Attachments']))
{
    $count = 0;

    if(isset($results['Related']))
    {
        $attachment_type = $results['Related'];
        $count += count($results['Related']);
    }

    if(isset($results['Attachments']))
    {
        $attachment_type = $results['Attachments'];
        $count += count($results['Attachments']);
    }

    for($i = 0; $i < $count; $i++)
    {
        # Format file name (change spaces to underscore then remove anything that isn't a letter, number or underscore)
        $filename = preg_replace('/[^0-9,a-z,\.,_]*/i', '', str_replace(' ', '_', $attachment_type[$i]['FileName']));
    }
}
于 2012-08-27T02:51:33.633 に答える
0

設定されていないものを呼び出している場合は、設定されていることが保証されているものとして自分自身をcount数えます。$attachment_type

于 2012-08-27T02:54:06.937 に答える