簡體   English   中英

php數組在多個數組中選擇一個鍵值並更改它們

[英]php array select a Key Value in multiple arrays and change them

有沒有一種簡單的解決方案,可以放入一個函數中來解決以下問題:

我有多個數組,如下所示:

Array
(
[0] => A
[1] => 100_1
[2] => 1
[3] => 1184
[4] => 0
)

Array
(
[0] => A
[1] => 100_2
[2] => 2
[3] => 1185
[4] => 0
)

Array
(
[0] => A
[1] => 100_3
[2] => 3
[3] => 1186
[4] => 0
)

Array
(
[0] => A
[1] => 101_2
[2] => 2
[3] => 1188
[4] => 0
)

Array
(
[0] => A
[1] => 302
[2] => 0
[3] => 1161
[4] => 0
)

我想做的是選擇僅具有_1,2,3的所有值,然后刪除_1,2,3,這樣所需的結果將是:

Array
(
[0] => A
[1] => 100
[2] => 1
[3] => 1184
[4] => 0
)

Array
(
[0] => A
[1] => 100
[2] => 2
[3] => 1185
[4] => 0
)

Array
(
[0] => A
[1] => 100
[2] => 3
[3] => 1186
[4] => 0
)

Array
(
[0] => A
[1] => 101
[2] => 2
[3] => 1188
[4] => 0
)

Array
(
[0] => A
[1] => 302
[2] => 0
[3] => 1161
[4] => 0
)

請注意,僅包含_1,2,3的值已更改。 非常感謝您的幫助,我們非常感謝。

到目前為止,我的代碼是:

foreach($data as $line) {
    if(substr($line,0,1)=="A") {
    if(!$first) {
        $parts = explode(chr(9), $line);            
        list($num1, $num2) = explode('_', $parts[1]); //this code needs to come first
        $parts[2] = isset($num2) ? $num2 : $parts[2]; //it replaces key[2] with _* (1,2,3)

//echo "<pre>"; print_r($parts); echo "</pre>";

   //the code to remove _* needs to go here.

    $pos = strpos($parts[1], '_');  // this was all it needed a simple two liner
    if($pos !== false) $parts[1] = substr($parts[1], 0, $pos);

您可以使用以下內容:

function formatArray($array)
{
    if(is_array($array))
    {
        foreach($array as $key=>$value)
        {
            $array[$key] = str_replace('_1', '', $value);
            $array[$key] = str_replace('_2', '', $value);
            $array[$key] = str_replace('_3', '', $value);
        }
        return $array;
    }
    return false;

}

使用每個數組作為參數調用此函數,或者可以將完整的數組分配給和父數組,然后再添加一個foreach它。

只需編寫一個使用preg_replace更改數據的函數即可:

<?php
$test_data = array("A", "100_1", "0", "1184", "0");

function removeValuesWithUnderScore(array $arr){
    //Loop over array
    foreach($arr as $key => $value){
        $arr[$key] = preg_replace('/_[1-3]/', '', $value);
    }

    //Return altered array
    return $arr;
}

$test_data = removeValuesWithUnderScore($test_data);

嘗試這個 :

$array = array("A", "100_1", 0, 1184, 0);
$array = array_map(
    function($str) {
        return preg_replace('/\_[\d]+/', '', $str);
    },
    $array
);

print_r($array)

編輯:如果OP僅需要刪除_1,_2和_3:

$array = array("A", "100_3", 0, 1184, 0);
$array = array_map(
    function($str) {
        return preg_replace('/\_[1|2|3]/', '', $str);
    },
    $array
);

print_r($array)

假設_1等總是出現在array[1]

foreach($array as $row) {
    $pos = strpos($row[1], '_');
    if($pos !== false) $row[1] = substr($row[1], 0, $pos);
}

假設您要替換任何附加了_xxx的值:

foreach($array as &$element){
    $element = strstr($element, '_', true)?:$element;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM