2017-06-07 11 views
0

ループを使用せずに2番目の配列にソートされたキーを持つ2番目の配列で1番目の配列を並べ替える方法。並べ替えられたキーを持つ別の配列で配列を並べ替える

1番目の配列。

$chunk = array(
       [0] => Array 
        (
         [id] => 212 
         [order] => 1 
         [title] => fdfdfdfdf 
        ) 

       [1] => Array 
        (
         [id] => 5 
         [order] => 2 
         [title] => 
        ) 

       [2] => Array 
        (
         [id] => 781 
         [order] => 3 
         [title] => 
        ) 
      ) 

第1の配列のソートされたキーを持つ第2の配列。

$sort = array 
    (
     [2] => 2 
     [0] => 0 
     [1] => 1 
    ) 
+0

どのような出力が必要ですか。あなたの質問の詳細を教えてください –

+0

可能な[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。どのように2番目の配列を取得していますか?たぶん、その瞬間にすでに1番目の配列をソートすることができます。 – FirstOne

+0

あなたは[usort](http://php.net/manual/en/function.usort.php)と一緒に行くことができます:[https://3v4l.org/MIJN6](https://3v4l.org)/MIJN6)。その場合、おそらくdupですか?[** PHP配列並べ替えによる配列値**](https://stackoverflow.com/questions/2477496/php-sort-array-by-subarray-value) – FirstOne

答えて

1

ではありませんあなたはそのためarray_mapを使用することを願ってみましょう:

$arr = array_map(function($val) use($chunk){ 
    return $chunk[$val]; 
}, $sort); 

は、これが出力されます。今すぐ

Array 
(
    [2] => Array 
     (
      [id] => 781 
      [order] => 3 
      [title] => 
     ) 

    [0] => Array 
     (
      [id] => 212 
      [order] => 1 
      [title] => fdfdfdfdf 
     ) 

    [1] => Array 
     (
      [id] => 5 
      [order] => 2 
      [title] => 
     ) 

) 

、あなたはキーは0,1になりたい場合は、2 ...マッピング後にarray_valuesを使用できます。

$arr = array_values($arr); 

出力:

Array 
(
    [0] => Array 
     (
      [id] => 781 
      [order] => 3 
      [title] => 
     ) 

    [1] => Array 
     (
      [id] => 212 
      [order] => 1 
      [title] => fdfdfdfdf 
     ) 

    [2] => Array 
     (
      [id] => 5 
      [order] => 2 
      [title] => 
     ) 

) 
+0

ありがとうこれは私が欲しいものです。 –

+0

あなたは何の匿名機能を使用キーワードで説明してください。 –

+0

@amitsingh array_mapは、配列内の各要素のコールバックを呼び出します。それはドキュメントにあります。さて、関数内にあるので、それは別のスコープなので、技術的には外部変数にアクセスできないため、 'use'部分があります。 'use'を追加すると、与えられた変数はアクセス可能になります。 [外部で計算された変数を使用したコールバック関数](https://stackoverflow.com/questions/4588714/php-callback-function-using-variables-calculated-outside-of-it) – FirstOne

0

もちろん、この機能はありません。あなたが見ることができるように

<?php 
$chunk = [ 
    // data 
]; 
$sorted = []; 
$sort = [ 
    // ordered keys 
]; 

foreach($sort as $keyToFind) { 
    foreach($chunk as $arrayElement) { 
     if($arrayElement['id'] == $keyToFind)) { 
      $sorted[$keyToFind] = $arrayElement; 
     } 
    } 
} 

似た何かをする必要があります、これはビット時間であり、理由は2入り組んだforeachesのconsumming ressources。のは、あなたの配列がとても大きく

関連する問題