对数组进行排序并显示其对应的数据

时间:2012-02-27 20:14:13

标签: php arrays algorithm variables sorting

所以我们得到了值(INT):

V1 , V2 , V3 , V4

文字:

Text1 , Text2 , Text3 , Text4

我们将订购值并回显相应的文本而不是值。

我们举一个例子:

(variables) :  V1 = 1 , V2 = 30 , V3 = 2 , V4 = 4
(text) :  Banana ,   Cake  ,  Apple , Patato

将结果 - >

V1 , V3 , V4 , V2 

订购后我们会显示文字而不是我们当前的结果。 所以最终的回声是:

Banana , Apple , Patato , Cake . (will echo them into a table)

注意:有些值可能相等!

到目前为止,我尝试使用3个数组:

($text_array) text , ($arr1) V1[...] , and ($arr2) V1[...] 

(与第二个相同,因为我使用sort($ array); on。)。

我试着回应:

echo $text_array[array_search($arr1[0], $arr2)]; 

但如果值相同,这将使文本重复。

如果我没有说清楚,我很抱歉......这很难解释。

    UPDATE

看起来像这样:

$V1 = $vars[1] + $vars[29] + $vars[30];
$V2 = $vars[6] + $vars[19] + $vars[40];
$V3 = $vars[14] + $vars[15] + $vars[44];
$V4 = $vars[0] + $vars[22] + $vars[37];
..........................................
$V15 = $vars[3] + $vars[28] + $vars[31];

文字数组:

$valori = array(("Altruismul", "Simtul estetic", "Creativitatea", "Stimularea intelectuala", "Reusita obiectivata", "Independenta", "Prestigiul", "Conducerea altora", "Avantajele materiale", "Siguranta", "Ambianta de la locul de munca", "Relatiile cu superiorii", "Relatiile cu colegii", "Stilul de viata pe care-l asigura profesia", "Varietate");

试过:

$arr = array("Altruismul" => $V1 , "Simtul estetic" => $V2 , "Creativitatea" => $V3 , "Stimularea intelectuala" => $V4 , "Reusita obiectivata" => $V5 , "Independenta" => $V6 , "Prestigiul" => $V7 , "Conducerea altora" => $V8 , "Avantajele materiale" => $V9 , "Siguranta" => $V10 , "Ambianta de la locul de munca" => $V11 , "Relatiile cu superiorii" => $V12 , "Relatiile cu colegii" => $V13 , "Stilul de viata pe care-l asigura profesia" => $V14 , "Varietate" => $V15);
            asort($arr);    

效果不好。

5 个答案:

答案 0 :(得分:1)

我猜你要说的是你有两个链接的数组,你想要排序一个并使用那个排序来输出第二个。如果是这样,试试这个:

$amount = array(1 => 1, 2 => 30, 3 => 2, 4 => 4);
$food = array(1 => 'Banana', 2 => 'Cake', 3 => 'Apple', 4 => 'Patato');
asort($amount);

foreach($amount as $key => $val) {
    echo "{$food[$key]} - $val\n";
}

或者:

$food = array('Banana' => 1, 'Cake' => 30, 'Apple' => 2, 'Patato' => 4);
asort($food);

foreach($food as $item => $val) {
    echo "$item - $val\n";
}

答案 1 :(得分:0)

首先,确保您拥有一组唯一的键:

$texts = array_unique($texts);  // assuming $texts is your foods

然后,你想把两者结合起来:

$combined = array_combine($texts,
                          array($v1, $v2, $v3, $v4 /* ... you get the idea */);

然后,您想要根据键进行排序:

ksort($combined);

然后您可以按顺序打印:

foreach($combined as $food, $val)
{
    echo "$food is at $val";
}

如果你不喜欢ksort,你可以随时颠倒array_combine函数中数组的顺序,然后只使用常规sort

答案 2 :(得分:0)

$int_array = array('$v1' => 2 , '$v2' => 30 , '$v3' => 4 , '$v4' => 10);
$string_array = array('banana' , 'cake' , 'apple' , 'potato');

//First , sort the int_array by value. (low to hight)
$int_array = asort($int_array);

//Second , echo string according to sorted int_array
foreach($int_array as $v => $num)
{
 echo $string_array[ substr($v , 2 , 1) - 1 ];
}

适合你吗?

答案 3 :(得分:0)

如果您的值是唯一的,那么您可以使用关联数组:

<?php
$data = array(
  1=>"Banana",
  2=>"Apple",
  4=>"Patato",
  30=>"Cake");

//sort the data by the keys if you want
aksort($data);
//Then access it like normal
echo $data[2]; //outputs "Apple"

如果您的价值不是唯一的,那么您将会遇到更难的时间。一种方法是使用具有查找功能的多维数组。

<?php
$data = array(
          array(1,"Banana"),
          array(2,"Apple"),
          array(4,"Patato"),
          array(30,"Cake")
        );

echo lookup($data,30); //Outputs "Cake"

function lookup($arr,$key) {
   foreach($arr as $a) {
     if($a[0] == $key)
       return $a[1];
   }
   return NULL;
}

你想要修改lookup()函数来处理你想要的重复值,我的函数只是输出它找到的第一个。

答案 4 :(得分:0)

您看到array_multisort()了吗?它将对多个列数组进行排序,而不会破坏它们的对应关系,这看起来就像你想要的那样。

虽然现在我对行数组有强烈的偏好,这就是大多数表格数据存储在编程语言中的方式,因此是一种更“自然”的方式:

array(
  array('variable' => 1,  'text' => 'Banana'),
  array('variable' => 30, 'text' => 'Cake'  ),
  ...
)

(根据您的喜好添加或删除数组或间接,但不变量是mainArray [0]包含完整行的数据(即某些数组层次结构中的V1和Text1))

...并使用functional sort

usort($mainArray, function($left, $right) {
    if ($left['variable'] < $right['variable'])
        return -1;
    else if ($left['variable'] == $right['variable'])
        return 0;
    else
        return +1;
});