2012-01-24 13 views
0

を返すarray_filter私はこのようになります配列があります。予期しない結果に

Array 
(
[0] => Array 
    (
     [pizza] => Calzone 
     [votes] => 1 
     [id] => 1 
    ) 

[1] => Array 
    (
     [pizza] => Margherita 
     [votes] => 5 
     [id] => 2 
    ) 

[2] => Array 
    (
     [pizza] => Pepperoni 
     [votes] => 9 
     [id] => 3 
    ) 

[3] => Array 
    (
     [pizza] => Quattro Formaggi 
     [votes] => 3 
     [id] => 4 
    ) 

[4] => Array 
    (
     [pizza] => Sloppy Giuseppe 
     [votes] => 7 
     [id] => 5 
    ) 

) 

をそして、私がこれを行うとき:私は「

[2] => Array 
    (
     [pizza] => Pepperoni 
     [votes] => 9 
     [id] => 3 
    ) 

function getPizza() { 
    $id = 3; 

    return array_filter($myArrayAsAbove, function ($arr) use ($id) { 
     return ($arr['id'] == $id); 
    }); 
} 

を、私はこれを取得mは確かに正しいですが、実際に私はこれをみたい:

[0] => Array 
    (
     [pizza] => Pepperoni 
     [votes] => 9 
     [id] => 3 
    ) 

お知らせ代わり20

誰かが私は解決策を見つけて、あなたは本当に素晴らしいしている場合、これが起こって、そしてどのようにそれを固定することができている理由について少し説明するのに役立つだろう - そう、私は次回のために知っていますよ!

+1

それが原因[ 'array_filter'ドキュメント](http://php.net/manual/en/function.array-filter.phpとして起こります)は、配列キーは保持されていると言う。 Pepperoniは元の行列にキー2を持っていたので、返された行列にそのキーを保持します。 –

答えて

3

array_filterは、配列のキーを保持します。

return array_values(array_filter($pizzen, function ($arr) use ($id) { 
    return $arr['id'] == $id; 
})); 
0

array_filterのドキュメント()特に言う:

配列のキーが保存されています。

あなたが鍵をリセットしたい場合は、array_mergeのようなものを(使用)だけでなく

function getPizza() { 
    $id = 3; 

    return array_merge(array_filter($myArrayAsAbove, function ($arr) use ($id) { 
     return ($arr['id'] == $id); 
    })); 
} 
0
function getPizza() { 
    $id = 3; 

    return array_values(array_filter($myArrayAsAbove, function ($arr) use ($id) { 
     return ($arr['id'] == $id)); 
    })); 
} 

array_values再インデックス配列:あなたがそれらをしたくない場合は、array_valuesはあなたに「新しい配列に包まれた」値のみを提供します。

0

あなたは、インデックスを再作成するarray_values()を使用することができます。

return array_values(array_filter($myArrayAsAbove, function ($arr) use ($id) { 
    return ($arr['id'] == $id); 
}));