2014-02-03 5 views
0

Я посетил аналогичный вопрос здесь, но не получил то, что хочу в php. Предположим, что у меня есть 2 массива. Вся проверка должна быть нечувствительной к регистру. Поле Field0 совпадает с полем 0 или fiEld1 аналогично Field1.PHP-Сортировка массива на основе другого массива

array1 is array(
"0"=>"field0", 
"1"=>"field1", 
"2"=>"field2", 
"3"=>"field3", 
); 

array2 is array(
"0"=>"field3", 
"1"=>"field2", 
"2"=>"field0", 
"3"=>"field1", 
"4"=>"field6", 
"5"=>"field5", 
); 

Теперь я хочу array2 быть сортируется на основе array1 как следующее:

array2 is array(
"0"=>"field0", 
"1"=>"field1", 
"2"=>"field2", 
"3"=>"field3", 
"4"=>"field6", 
"5"=>"field5", 
); 

смотрите здесь array1 имеет 4 элемента так array2 должны быть отсортированы на основе ровно 4 элементов array1 и отдыха 2 элемента (индекс 4,5 из массива2) должен, как и раньше, в array2.

ответ

2

Try array_intersect в сочетании с array_diff:

<?php 
$array1 = array(
    "0"=>"field0", 
    "1"=>"field1", 
    "2"=>"field2", 
    "3"=>"field3", 
); 

$array2 = array(
    "0"=>"field3", 
    "1"=>"field2", 
    "2"=>"field0", 
    "3"=>"field1", 
    "4"=>"field6", 
    "5"=>"field5", 
); 


$array3 = array_merge(
    array_intersect($array1, $array2), 
    array_diff($array2, $array1) 
); 

var_dump($array3); 

Update

Для случая нечувствительный подход, использовать array_map для гарантии того, что все записи в обоих массивах имеют нижний регистр:

$array3 = array_map('strtolower', $array1); 
$array4 = array_map('strtolower', $array2); 

$array5 = array_merge(
    array_intersect($array3, $array4), 
    array_diff($array4, $array3) 
); 

var_dump($array5); 
+0

если я изменить регистр стоимости array1 или массив2 затем сортировки будет изменен. не могли бы вы сделать его нечувствительным к регистру? – Samiul

+0

Вы также хотите сохранить исходный регистр массивов? –

+0

Да, массив array2 должен быть неповрежденным – Samiul

1

Предполагая, что массив 2 всегда больше, чем массив 1:

$array2 = array_merge($array1, array_diff($array2, $array1)); 
-2

Это очень просто:

$array = $array1 + $array2 
+0

Это не сработает, так как это только вычисляет объединение между двумя массивами. См. Http://www.php.net/manual/en/language.operators.array.php –

+0

Я тестировал его, он работает. – jgroenen

+0

Извините, но: $ array1 = array ( «0» => «field0», «1» => «field1», «2» => «field2», «3» => «field3», ); $ массив2 = массив ( "0" => "field3", "1" => "поле2", "2" => "field0", "3" => "поле1", «4 "=>" field6 ", " 5 "=>" field5 ", ); var_dump ($ array1 + $ array2); [код] массив (6) { [0] => строка (6) "field0" [1] => строка (6) "поле1" [2] => строка (6) "поле2" [3] => строка (6) "field3" [4] => строка (6) "field6" [5] => строка (6) "Field5" } [/code] –

Смежные вопросы