1

コード:

    $row['text'] = 'http://t.co/iBSiZZD4 and http://t.co/1rG3oNmc and http://t.co/HGFjwqHI and http://t.co/8UldEAVt';

    if(preg_match_all('|http:\/\/t.co\/.{1,8}|i',$row['text'],$matches)){
        foreach($matches[0] as $value){
            $headers = get_headers($value,1);
            if(is_array($headers['Location'])){
                $headers['Location'] = $headers['Location'][0];
            }
            $row['text'] = preg_replace('|http:\/\/t.co\/.{1,8}|i', '<a href="' . $headers['Location'] . '">' . $headers['Location'] . '</a>',$row['text']);
        }
    }

これは に関連していget_headers()ます。場合によってget_headers($url,1)は、次のように位置インデックス キーを持つ配列を返します[Location]=>Array([0]=>url1 [1]=>url2)。私は基本的にif[Location]と同等にしたいです。ただし、上記のコードはそのタスクを達成していないようです。私も試してみましたが、どちらも問題を解決しませんでした。考え?[Location][0][Location][0]array_key_exists()isset()

4

1 に答える 1

2

その場で交換しようとしないでください。最初にすべての値を取得してから、1 つのバッチで置換を実行します (2 つの配列を$searchおよび$replaceパラメータとして使用)。

<?php

    $replace = array();
    $row = array('text' => 'http://t.co/iBSiZZD4 and http://t.co/1rG3oNmc and http://t.co/HGFjwqHI and http://t.co/8UldEAVt');
    if (preg_match_all('|http:\/\/t.co\/.{1,8}|i', $row['text'], $search)) {
        foreach ($search[0] as $value) {
            $headers = get_headers($value, 1);
            if (is_array($headers['Location'])) {
                $headers['Location'] = $headers['Location'][0];
            }
            $replace[] = "<a href='{$headers["Location"]}'>{$headers["Location"]}</a>";
        }
        $row['text'] = str_replace($search[0], $replace, $row['text']);
        echo $row["text"];
    }

PS - 次回は、問題のコンテキストを教えてください。「短縮 URL を解決するサービスを作成している」ことを教えてください。コードだけからそれを理解させないでください。

于 2012-08-04T20:53:37.483 に答える