php数组在多个数组中选择一个键值并更改它们

php数组在多个数组中选择一个键值并更改它们,php,arrays,Php,Arrays,是否有一个简单的解决方案可以放在函数中解决以下问题: foreach($array as $row) { $pos = strpos($row[1], '_'); if($pos !== false) $row[1] = substr($row[1], 0, $pos); } 我有多个数组,如下所示: Array ( [0] => A [1] => 100_1 [2] => 1 [3] => 1184 [4] => 0 ) Array ( [0]

是否有一个简单的解决方案可以放在函数中解决以下问题:

foreach($array as $row) {
    $pos = strpos($row[1], '_');
    if($pos !== false) $row[1] = substr($row[1], 0, $pos);
}
我有多个数组,如下所示:

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);
foreach($line形式的数据){
if(substr($line,0,1)=“A”){
如果(!$first){
$parts=爆炸(chr(9),$line);
list($num1,$num2)=分解(“”,$parts[1]);//此代码需要放在第一位
$parts[2]=isset($num2)?$num2:$parts[2];//它将键[2]替换为*(1,2,3)
//echo“”;print_r($parts);echo“”;
//要删除*的代码需要转到此处。
$pos=strpos($parts[1],“”);//这就是它所需要的全部,一个简单的两行程序
如果($pos!==false)$parts[1]=substr($parts[1],0,$pos);

您可以使用以下功能:

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

使用每个数组作为参数调用此函数,或者您可以将整个数组分配给和父数组,然后再添加一个
foreach
以循环通过它。

您可以使用以下方法:

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

使用每个数组作为参数调用此函数,或者您可以将整个数组分配给和父数组,然后再添加一个
foreach
以循环通过它。

您可以使用以下方法:

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

使用每个数组作为参数调用此函数,或者您可以将整个数组分配给和父数组,然后再添加一个
foreach
以循环通过它。

您可以使用以下方法:

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

使用每个数组作为参数调用此函数,或者您可以将整个数组分配给和父数组,然后再添加一个
foreach
以循环通过它。

假设
\u 1
等总是发生在
数组[1]

<?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);

假设
\u 1
等总是发生在
数组[1]

<?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);

假设
\u 1
等总是发生在
数组[1]

<?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);

假设
\u 1
等总是发生在
数组[1]

<?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);

只需编写一个函数,使用preg_replace更改数据:

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

print_r($array)

只需编写一个函数,使用preg\u replace来更改数据:

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

print_r($array)

只需编写一个函数,使用preg\u replace来更改数据:

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

print_r($array)

只需编写一个函数,使用preg\u replace来更改数据:

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

print_r($array)
试试这个:

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

print_r($array)
编辑:如果OP只需要删除1、2和3:

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

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

print_r($array)
编辑:如果OP只需要删除1、2和3:

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

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

print_r($array)
编辑:如果OP只需要删除1、2和3:

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

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

print_r($array)
编辑:如果OP只需要删除1、2和3:

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

假设您希望替换任何附加了_xxx的值:


假设您希望替换任何附加了_xxx的值:


假设您希望替换任何附加了_xxx的值:


假设您希望替换任何附加了_xxx的值:




你先试试看,然后带着一个特别的问题来怎么样?我已经做了一整天的编辑。我会说“Machavity”是最接近的,我很快就会测试。你先试试看,然后带着一个特别的问题来怎么样?我已经做了一整天的编辑。我会说“Machavity”是最接近的,我很快就会测试。你先试试怎么样带着一个特别的问题来?我已经一整天了-我做了编辑。我会说“Machavity”是最接近的,我很快就会测试。你先试试,然后带着一个特别的问题来怎么样?我已经一整天了-我做了编辑。我会说“Machavity”是最接近的,我很快就会测试。不会像他说的那样,只有_1、_2和_3应该被删除。@kevdev:你能解释一下吗?@kevdev:好的,我明白了:)“我想做的是选择所有只有_1,2,3的值,然后删除_1,2,3”,op在他的问题中告诉我们,他只想删除_1,2,3(_1,_2,_3),如果这不是错误的话(也可能是,但文本中另有说明)您的代码也将删除,例如_4、_5、_6等等。@kevdev:Ohh抱歉弄混了:)不会像他说的那样工作,只应删除_1、_2和_3。@kevdev:您能解释一下吗?@kevdev:好的,我知道了:)“我要做的是选择所有只有_1,2,3的值,然后删除_1,2,3”op在他的问题中告诉我们,他只想删除_1,2,3(_1,_2,_3),如果这不是一个错误(也可能是,但文本中另有说明)您的代码也将删除,例如_4、_5、_6等等。@kevdev:Ohh抱歉弄混了:)不会像他说的那样工作,只应删除_1、_2和_3。@kevdev:您能解释一下吗?@kevdev:好的,我知道了:)“我要做的是选择所有只有_1,2,3的值,然后删除_1,2,3”op在他的问题中告诉我们,他只想删除_1,2,3(_1,_2,_3),如果这不是一个错误(也可能是,但文本中另有说明)您的代码也将删除,例如_4、_5、_6等等。@kevdev:Ohh抱歉弄混了:)不会像他说的那样工作,只应删除_1、_2和_3。@kevdev:您能解释一下吗?@kevdev:好的,我知道了:)“我要做的是选择所有只有_1,2,3的值,然后删除_1,2,3”op在他的问题中告诉我们,他只想删除_1,2,3(_1,_2,_3),如果这不是一个错误(也可能是,但文本中另有说明),你的代码也会删除,例如_4,_5,_6等等。@kevdev:Ohh抱歉被搞糊涂了:)你好,Machavity这太接近了:$pos=strpos($parts[1],'');if($pos!==false)$parts[1]=substr($parts[1],0,$pos-1);但它删除了一个'0',因此键[1]显示10,但应该显示100等。好的,最后一个$pos-1;需要是$pos-0;现在它工作得很好:)Machavity你能转到我的个人资料吗?我想你能帮我解决一个未回答的问题吗