2013-05-31 4 views
0

У меня есть следующие две гипотетические массивы:PHP: Установить индекс массива на основе другого массива

$values = array("fourth", "first", "second", "third"); 
$indices = array(3, 0, 1, 2); 

Какой самый быстрый способ изменить $values основанные на $indices?

Возможно ли каким-либо образом $values->index_array = $indices?

+0

@Danack: когда ОП не может выражать свои мысли - это нормальный) – zerkms

+1

@zerkms ваш ответ был верным и быстрым. Шахта была правильной, но медленнее. Положите его обратно, и я поднимусь :) – Danack

+0

Это поможет, если вы продемонстрируете, каков желаемый результат. – Barmar

ответ

0

Я хотел бы сделать:

<?php 
$newarray = array_fill_keys($indices, $values); 
?> 

Это предполагает, ваши показатели всегда уникальны конечно.

+0

Спасибо, мне кажется, именно то, что мне нужно – TheWaterIsCold

+0

Я не думаю, что это делает то, что вы хотите. Он устанавливает каждый элемент '$ newarray' в одно и то же значение. – Barmar

+0

Он делает то, что он попросил. Это прекрасно? Только ОП знает. –

1

Это просто догадка, основанная на фразе из вопроса:

образом переставить $ значения на основе $ индексов

$values = array("fourth", "first", "second", "third"); $indices = array(3, 0, 1, 2); 

array_multisort($indices, $values); 

var_dump($values); 

Интернет демо: http://ideone.com/UKfNiq

Выход :

array(4) { 
    [0]=> 
    string(5) "first" 
    [1]=> 
    string(6) "second" 
    [2]=> 
    string(5) "third" 
    [3]=> 
    string(6) "fourth" 
} 
+0

Это не работает. Если какие-либо '$ indicings' не соответствуют порядку, как PHP назначает ключи массива, значение ключа теряется. –

+0

@Phillip: это обязанность OP гарантировать, что они в порядке. См. «Переупорядочить значения $ на основе индексов $ – zerkms

+0

@zerms: достаточно справедливо. Этот вопрос все равно засасывает. Время двигаться дальше. –

-1

Ответы ZerkMS верны, как определено в вопросе, но вам может быть лучше использовать другой подход к генерированию результатов.

Если вы не можете, а не создания двух массивов:

$values = array("fourth", "first", "second", "third"); 
$indices = array(3, 0, 1, 2); 

вместо этого просто сгенерировать один массив и вызвать ksort на нем:

$valuesToSort = array(); 
$valuesToSort[3] = 'fourth'; 
$valuesToSort[0] = 'first'; 
$valuesToSort[1] = 'second'; 
$valuesToSort[2] = 'third'; 

ksort($valuesToSort); 
Смежные вопросы