【问题标题】:Creating array containing ranks based on the values of another array?根据另一个数组的值创建包含排名的数组?
【发布时间】:2011-08-30 03:46:38
【问题描述】:

基本上,我有数组$name$followers$imageurl,我想用数字排列$followers数组,但也相应地更新$name$imageurl的排列。

例如,$followers[0] = 2783848$name[0] = "Rob"$imageurl[0] = "http://xxx.com/image.jpeg",其中所有三个数组通过具有相同的数组键进行链接。

为了更好的衡量,这是我的整个代码:

$screennames = array(
                 0 => "LilKim",
                 1 => "NickiMinaj",
                 2 => "drakkardnoir",
                 3 => "LilTunechi",
                 4 => "kanyewest",
                 5 => "RealWizKhalifa",
                 6 => "beyonce",
                 7 => "KELLYROWLAND",
                 8 => "LupeFiasco",
                 9 => "TinieTempah",
                 10 => "50cent",
                 11 => "TRINArockstarr",
                 12 => "iamdiddy",
                 13 => "Timbaland",
                 14 => "chrisbrown"
                     );

for($i = 0; $i < 15; $i++) {
$xml[$i] = @simplexml_load_file('http://api.twitter.com/1/users/show.xml?screen_name=' . $screennames[$i]);
$name[$i] = $xml[$i]->name;
$followers[$i] = $xml[$i]->followers_count;
$imageurl[$i] = $xml[$i]->profile_image_url;
}

任何建议/答案/cmets 将不胜感激:)!!

我也不确定这是否是查询 Twitter API 的最佳方式,所以如果有人有任何建议,请随时将它们留在这里 :)。

更新:

我想我已经找到了一种更准确地说出来的方法;

我有数组$name$followers$imageurl,其中每个值都是相对的,例如$name[0] 相对于 $followers[0]$imageurl[0]。我想创建第四个数组$rank,其中包含根据关注者的相对值排序的值1-15,例如:

$followers = array(0 => 278738, 1 => 32784, 2 => 103562, 3 => 37848); // Etc from keys 0 - 14

$rank[0] = 1;
$rank[1] = 4;
$rank[2] = 2;
$rank[3] = 3;

这应该会让我更容易弄清楚我在寻找什么。

【问题讨论】:

    标签: php xml arrays object twitter


    【解决方案1】:

    您是否保留密钥并不重要。为此使用asort。当您遍历 name 数组时,值将按字母顺序排列(或者,取决于您的 asort 参数),并且索引(键、数字)将不按数字顺序排列。

    //show by name alphabetically
    asort($names); //puts names in alphabetic order, while preserving key associations
    foreach ($names as $key=>$value) {
        echo "$value has " . $followers[$key] . ' followers<br>';
    }
    
    //show ordered by most followers
    arsort($names, SORT_NUMERIC); //puts followers in reverse numeric order, while preserving key associations
    foreach ($followers as $key=>$value) {
        echo $name[$key] . ' has $value followers<br>';
    }  
    

    更新

    //Create rank array
    $rank=0;
    arsort($names, SORT_NUMERIC); //puts followers in reverse numeric order, while preserving key associations
    foreach ($followers as $key=>$value) {
      $rank++; 
      $ranks[$rank]=$key;
    }  
    

    然后你可以循环遍历排名,并显示它,或者执行插入语句或其他操作。

    foreach ($ranks as $rank=>$key) {
       echo "{$name[$key]} has rank $rank";
       $sql="INSERT INTO ranks ('username','followers','rank') VALUES ('{$name['$key']}','{$followers['$key']}','$rank')";
    }
    

    【讨论】:

    • 请原谅我的无知,但输出不是例如“Rob 有 829389 个关注者”吗?
    • 应该是的。这不是你想要的吗?如果您在关注者列上进行排序并循环通过它,如果您想显示关注者最多的列,它会起作用。
    • 感谢您的意见 :)。我意识到我的问题并没有很好地阐述,因此我已经对其进行了更新。我真正想要的是基于$followers 的值构建第四个数组,其秩为1-15
    • 嗯。仍然没有意义。你想输出什么?您想在屏幕上看到的内容的简单英文版本是什么,不一定是您想在代码中执行的操作?
    • 我想有四组数据,name, followers, imageurl and rank 我想有一个rank 值基于followers 的数量以降序排列,所以followers 中的条目带有最高的数值将被分配到第 1 级,一直到第 15 级的最低值。然后我想将这些数据集放入 MySQL 数据库中,其中包含列名称、关注者、url、排名,以便可以选择它们并可以显示每周排名和关注者变化。最后一部分不是问题,但第一部分是。
    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 2023-01-07
    • 2022-12-18
    • 2015-04-17
    • 2017-09-19
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多