Сортировка массива и отображение его корреспондента - PullRequest
0 голосов
/ 28 февраля 2012

Итак, мы получили значения (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); на нем).

Я попытался повторить с:

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 ]

1 голос
/ 28 февраля 2012

Я предполагаю, что вы пытаетесь сказать, что у вас есть два связанных массива, и вы хотите отсортировать один и использовать эту сортировку для вывода второго. Если это так, попробуйте это:

$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";
}
0 голосов
/ 28 февраля 2012

Вы видели array_multisort () ? Он будет сортировать несколько массивов столбцов, не нарушая их соответствия, что выглядит так, как вы хотите.

Хотя в настоящее время у меня есть сильные предпочтения для массивов строк, так как большинство табличных данных хранятся в языках программирования и, таким образом, это более «естественный» способ:

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

(добавить или удалить массивы или косвенные ссылки по своему вкусу, но неизменным является то, что mainArray [0] содержит данные полной строки (т. Е. Как V1, так и Text1 в некоторой иерархии массива))

... и использовать функциональную сортировку :

usort($mainArray, function($left, $right) {
    if ($left['variable'] < $right['variable'])
        return -1;
    else if ($left['variable'] == $right['variable'])
        return 0;
    else
        return +1;
});
0 голосов
/ 28 февраля 2012
$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 ];
}

У тебя работает?

0 голосов
/ 28 февраля 2012

Если ваши значения уникальны, то вы можете использовать ассоциативный массив:

<?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 (), чтобы обрабатывать дублирующиеся значения так, как вы хотите, моя функция просто выведетпервый найденный.

0 голосов
/ 28 февраля 2012

Во-первых, убедитесь, что у вас есть уникальный набор ключей:

$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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...