2

現在、私はこれを持っています:

$pattern = array('industry_id','category_id','subcategory_id');

$data = array('advert_id' => string '261501' (length=6)
  'advert_type_id' => string '7' (length=1)
  'user_id' => string '6221' (length=4)
  'industry_id' => string '17' (length=2)
  'category_id' => string '769' (length=3)
  'subcategory_id' => string '868' (length=3)
  'model' => string 'Custom Semi Drop Deck Trailer' (length=29)
  'description' => string 'Industry: Trailer );

それで:

array_intersect_key(  $data , array_flip($pattern) );

array_interect_key&を使用array_flipして から値を取得する$data$pattern、次のような結果が得られます。

array (size=3)
  'category_id' => string '769' (length=3)
  'subcategory_id' => string '930' (length=3)
  'industry_id' => string '17' (length=2)

残念ながら、ご覧のとおり、結果キーの並べ替えは、 で宣言したものと同じではありません$pattern。この後、キーをハードコーディングせず$patternに配列を内破し、このようなことをしたいので、宣言したように並べ替える簡単な方法はありますか。industry_id.category_id.subcategory_id

4

2 に答える 2

4

$pattern の目的のキー順序が得られないarray_intersect_keyメソッドを既に見つけたので、代わりにこれを試してください。

// since original $pattern is not ASSOC (only vals)
// flip it so defined vals become keys
$pattern_flipped = array_flip($pattern);
$result = array();
foreach ($pattern_flipped as $k => $v) {

    if (isset($data[$k])) {
        $result[$k] = $data[$k];
    }
}
var_dump($result); // test

// can use original 0 1 2 dynamic keys for concatenation
echo $result[$pattern[0]], $result[$pattern[1]], $result[$pattern[2]], '<br>';
// or use hardcoded keys
echo $result['industry_id'], $result['category_id'], $result['subcategory_id'], '<br>';
于 2015-11-23T00:21:17.083 に答える
0

あなたが説明した結果をどのように得ているのか、私にはわかりません。私はあなたのコードを試してみました

array (size=3)
   'industry_id' => string '17' (length=2)
   'category_id' => string '769' (length=3)
   'subcategory_id' => string '868' (length=3)

array_filter を使用しても、これを別の方法で行うことができます

$newData = array_filter($data, function($key) use ($pattern) {
    if (in_array($key, $pattern))
        return true;
}, ARRAY_FILTER_USE_KEY)
于 2015-11-23T00:34:23.533 に答える