[英]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.