2017-07-31 5 views
0

array_popまたはarray_shiftを使ってアイテムを配列からシフトできますが、これは文字列の先頭または末尾に適用されます。キーで配列からアイテムを取り出します

$a = [ 
    'first' => '1st', 
    'second' => '2nd', 
    'third' => '3rd' 
]; 

$item = pull_by_key($a, 'second'); 
echo $item; 

出力だろう(と$アイテムが設定されます)2ndと結果の配列は以下のようになります:私はそれがキーだ、そうはして配列からアイテムを引き出すために探しています

[ 'first' => '1st', 'third' => '3rd' ] 

私は、カスタム関数でこれを行うことができます。

function pull_by_key(&$array, $key){ 
    $retval = $array[$key]; 
    unset($array[$key]); 
    return $retval; 
} 

...しかし、これをしなかった機能があった場合、私は思っていました。私は何も見つけることができませんでした。

したがって、わかりやすくするには:設定していないアイテムを削除したいだけでなく、アイテムをアイテムから引き出したいと思います。したがってarray_popまたはarray_shiftですが、配列の最初または最後の項目ではなく、その項目がキーです。

+1

ない重複した...見て、それは、配列からそれを引っ張っています、配列から特定の要素を削除していません関数では、アイテムを引っ張っているので(内容は分かります)、それを配列から削除します。閉じる前に質問を読んでください。 – patrick

+0

@SebastianBrosch、申し訳ありませんが、これをやった関数だった "最初からそこにあった...私はどのくらい明確に私がそれを置くことができるかを知っている。つまり、 'array_pop'と' array_shift'があるので 'array_pop_by_key'があるのは驚くことではないでしょうか? – patrick

+1

ここにすべての配列関数のリストがあります:http://php.net/manual/en/ref.array.php - 検索する関数がない場合は、独自のカスタム関数を作成する必要があります。 –

答えて

0

はこれを試してください: -

$a = [ 
'first' => '1st', 
'second' => '2nd', 
'third' => '3rd' 
]; 

pull_by_key($a, 'second'); 
function pull_by_key(&$array, $key){ 
    $retval = $array[$key]; 
    unset($array[$key]); 
    return $retval; 
} 
echo "<pre>"; print_r($a); die; 
+0

おい、それは意味をなさない... $ aはすでに必要な方法で、print_r($ a)はそのことを示します。 newArrayに配置する必要はありません。 – patrick

+0

あなたの要件は何ですか? – kunal

+0

"array_popまたはarray_shiftを使用して配列からアイテムをシフトすることはできますが、これは文字列の先頭または末尾に適用されます。私はそこに1つのコマンドがあるのか​​どうか疑問に思っていました... – patrick

0

は一時配列$tempArrayを定義し、$tempArray内部に引き込まアイテムをプッシュ:

<?php 

$a = [ 
    'first' => '1st', 
    'second' => '2nd', 
    'third' => '3rd' 
]; 

echo pull_by_key($a, 'second'); 

function pull_by_key(&$array, $key){ 
    $tempArray = []; 
    $tempArray[$key] = $array[$key]; 
    unset($array[$key]); 
    return $tempArray[$key]; 
} 
+0

ミラノ、ありがとうございますが、私の例の関数はうまく動作し、配列を複製する必要はありません。 (array_popとarray_shift) – patrick

+1

それを設定しない場合は、その値を取得する方法がない場合は、実行を通知してくださいいくつかの変数に格納しない限り、 'unset'を実行します。 IMO、私はあなたの要件を達成するのに役立つ内蔵機能はないと思います。 –

+0

あなたは正しいと思います...単一のバージョンはありません。私は全体の配列を複製するのではなく、単一のアイテムを '複製'する方が好きです。しかし、私が言ったように:あなたは正しい...単一のコマンドはありません...私は機能要求としてそれを入れます:) – patrick

0

これはPHPのarray_splice()はまったく同じものです。私はちょうど最初にキーのオフセットの検索を行う必要があった。存在しない要素にアクセスしようとするとエラーが発生しないようにするには、条件ステートメントが必要でした。

コード:(Demo

$a = [ 
    'first' => '1st', 
    'second' => '2nd', 
    'third' => '3rd' 
]; 
$find_key='second'; 
if(($offset=array_search($find_key,array_keys($a)))!==false){ 
    $pulled=array_splice($a,$offset,1); 
    var_export($pulled); 
    echo "\n"; 
    var_export($a); 
}else{ 
    echo "$find_key not found"; 
} 

出力:

array (
    'second' => '2nd', 
) 
array (
    'first' => '1st', 
    'third' => '3rd', 
) 
関連する問題