【问题标题】:ASC sort foreachASC 排序 foreach
【发布时间】:2013-02-28 00:33:47
【问题描述】:

以下代码通过函数从 google 获取结果。 这一切都很好,我只想对结果进行排序。

如何在 foreach 循环中按字母 ASC 对记录进行排序...?

function fetch_google($terms="sample search",$numpages=1,$user_agent='Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0')  
{
    $searched="";
    for($i=0;$i<=$numpages;$i++)
    {
        $ch = curl_init();
        $url="http://www.google.com/search?hl=en&q=".urlencode($terms)."&start=".$i.'0';
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
        curl_setopt ($ch, CURLOPT_HEADER, 0);
        curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_REFERER, 'http://www.google.com/');
        curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,120);
        curl_setopt ($ch,CURLOPT_TIMEOUT,120);
        curl_setopt ($ch,CURLOPT_MAXREDIRS,10);
        curl_setopt ($ch,CURLOPT_COOKIEFILE,"cookie.txt");
        curl_setopt ($ch,CURLOPT_COOKIEJAR,"cookie.txt");
        $searched=$searched.curl_exec ($ch);
        curl_close ($ch);
    }

    $xml = new DOMDocument();
    @$xml->loadHTML($searched);
    foreach($xml->getElementsByTagName('a') as $lnk)
    {
        if($lnk->getAttribute('class')=='l')
        {
           $links[] = array(
        'href' => $lnk->getAttribute('href'),
        'title' => $lnk->nodeValue
        );
        }
    }
    return $links;  
}

$content = fetch_google("exemple",1);

foreach($content as $elem)
{
    echo "<a target=\"_blank\" href=$elem[href]>$elem[title]</a><br>";
}

我想按 $elem[title] ASC 对行进行排序

非常感谢您的帮助!

【问题讨论】:

    标签: php arrays sorting foreach


    【解决方案1】:

    想象一下这个使用函数usort()的例子

    $array = array (
       array('href' => 'http://132', 'title' => 'yxz'),
       array('href' => 'http://233', 'title' => 'abc'),
       array('href' => 'http://324', 'title' => '123')
    );
    
    usort($array, function($a, $b) {
        if($a['title'] === $b['title']) {
            return 0;
        }
    
        return $a['title'] < $b['title'] ? - 1  : 1;
    });
    
    var_dump($array);
    

    【讨论】:

    • 纯代码答案在 Stackoverflow 上的价值很低,因为它们在教育/授权 OP 和成千上万的未来研究人员方面做得很差。每个答案都应该被解释——即使是简单/基本/不言自明/声明性的答案。
    • 您是否在大量发布这些 cmets?或者您是否特别在寻找有关该主题的解释?在第一种情况下,请不要!
    • 您的答案还不错,因为它至少链接到文档。当人们开始发布完整答案时,我将停止鼓励人们发布完整答案。仅代码的答案在这里太普遍了,它只会鼓励新用户 sn-p drop。对SO不好。我们可以对此进行争论,或者您可以花费相同的时间将您的帖子编辑为对研究人员有价值的内容。如果你有足够的时间来刻录,你可以找到一个规范的来关闭这个页面。
    【解决方案2】:

    试试这个:

    $array = array (
       array('href' => 'http://132', 'title' => 'yxz'),
       array('href' => 'http://233', 'title' => 'abc'),
       array('href' => 'http://324', 'title' => '123')
    );
    
    $sort = array();
    foreach($array as $k=>$v) {
        $sort['title'][$k] = $v['title'];
    }
    
    array_multisort($sort['title'], SORT_ASC, $array);
    
    
    echo "<pre>";
    print_r($array);
    

    【讨论】:

    • 纯代码答案在 Stackoverflow 上的价值很低,因为它们在教育/授权 OP 和成千上万的未来研究人员方面做得很差。每个答案都应该被解释——即使是简单/基本/不言自明/声明性的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2017-10-27
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多