2017-07-31 47 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_poparray_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)會顯示出來。不需要把它放在新陣列中。 – patrick

+0

那麼你的要求是什麼? – kunal

+0

「我可以通過使用array_pop或array_shift從一個數組中移動一個項目,但是這對於字符串的開始或結束是有效的,我正在通過它的關鍵字從數組中拉出一個項目」.. ,我想知道是否有一個單一的命令... – 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',除非你存儲在一些變量中。國際海事組織,我不認爲有任何內置的功能可以幫助您實現您的要求。 –

+0

我認爲你是對的......沒有單一的版本。我寧願'複製'單個項目,而不是重複整個數組。但就像我說的:你是對的......沒有一個單一的命令......我會把它作爲一個功能請求:) – patrick

0

這正是PHP的array_splice()一樣。我只需要首先搜索鍵的偏移量。爲了防止由於嘗試訪問不存在的元素而導致的任何錯誤,條件statemeent是必需的。

代碼:(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', 
) 
相關問題