2016-10-03 4 views
1

У меня вопрос как в заголовке. Я пытался понять это сам, и поиск в Интернете, но без результата;/Сортировка одного значения ассоциативного массива по другому значению ассоциативного массива в PHP

У меня есть 4 массива:

$sortingArr = array(
    0 => 'EURUSD', 
    1 => 'USDGBP' 
); 

$arr1 = array('name' => 'EURUSD'); 
$arr2 = array('name' => 'USDPLN'); 
$arr3 = array('name' => 'USDGBP'); 

и я слился названных arr1, arr2, arr3, как показано ниже:

$data = array_merge_recursive($arr1, $arr2, $arr3); 

Как отсортировать значения из $ data like 'EURUSD' ... по значениям из $ sortingArr.

Я надеюсь, что я объяснил это ясно и пожалуйста быть понимание сог его мой первый пост здесь :)

+1

Каков ваш ожидаемый результат? Должен ли 'USDPLN' быть между' EURUSD' и 'USDGBP' или после него? –

+0

я хочу, чтобы получить массив $ данных, отсортированных по $ sortingArr так: 'EURUSD', 'USDGBP', 'USDPLN' теперь у меня есть: 'EURUSD', 'USDPLN', «USDGBP ', –

+0

Ваш результат ожидания следует за базовой сортировкой в ​​алфавитном порядке, почему бы не просто «sort ($ mergedarray)»? Пример https://eval.in/654407 –

ответ

0

Ниже функции для сортировки массива по значениям другого массива

<?php 
    //sorting array 
    $sortingArr = array(
    0 => 'EURUSD', 
    1 => 'USDGBP', 
); 
$arr1 = array('name' => 'EURUSD'); 
$arr2 = array('name' => 'USDPLN'); 
$arr3 = array('name' => 'USDGBP'); 
// to be sorted array 
$data = array_merge_recursive($arr1, $arr2, $arr3); 
// calling a custom function 
$new_data = sortArrayByArrayValue($data['name'],$sortingArr); 
print_r($new_data); // print results 

function sortArrayByArrayValue($array, $orderArray) { 
    $ordered = array(); 
    // loop the array 
    foreach ($orderArray as $key=>$value) { 
     // check the value is in the $array 
     if (($k = array_search($value, $array)) !== false) { 
      // assign thet value to new array 
      $ordered[$k] = $array[$k]; 
      // unset the value 
      unset($array[$k]); 
     } 
    } 
    return $ordered+ $array; 
} 

Выход:

Array 
(
    [0] => EURUSD 
    [2] => USDGBP 
    [1] => USDPLN 
) 
+0

правильный. или вы можете использовать return array_merge ($ ordered, $ array); У вас все еще есть проблема? –