我有一个像这样的字符串,
sidePanel[]=1&sidePanel[]=2&sidePanel[]=4
如果我需要在字符串中添加另一个值,我会这样做:
$sidePanel = explode('&', $_SESSION['sidePanel']);
array_push($sidePanel, 'sidePanel[]=3');
$sidePanel = implode('&', $sidePanel);
返回此内容:
sidePanel[]=1&sidePanel[]=2&sidePanel[]=4&sidePanel[]3
现在我该如何制作它以便它总是在数组'sidePanel [] = 2'之后插入,当我在&?
我不希望它按数字顺序排列,尽管此示例将按数字顺序返回,因为字符串可以按任何顺序更改。
我不能使用array_splice,因为我理解这使用数组的键,并且sidePanel [] = 2的位置可以改变它并不总是相同。
答案 0 :(得分:3)
你确实可以使用array_splice,但你必须首先找到插入点的位置:
$sidePanelArr = explode( '&', $_SESSION['sidePanel'] );
// find the position of 'sidePanel[]=2' in array
$p = array_search( 'sidePanel[]=2', $sidePanelArr );
// insert after it
array_splice( $sidePanelArr, p+1, 0, 'sidePanel[]=3' );
$sidePanelSt = implode( '&', $sidePanelArr );
您还可以将字符串拼接到原始字符串中,而不会爆炸和重新插入。 函数substr_replace()是你的朋友:
$sidePanelSt = $_SESSION['sidePanel'];
// find the position of 'sidePanel[]=2' in string
// (adding '&' to the search string makes sure that 'sidePanel[]=2' does not match 'sidePanel[]=22')
$p = strpos( $sidePanelSt.'&', 'sidePanel[]=2&') + strlen('sidePanel[]=2' );
// insert after it (incl. leading '&')
$sidePanelSt = substr_replace( $sidePanelSt , '&sidePanel[]=3' , $p, 0 );
答案 1 :(得分:1)
请参阅:http://codepad.org/5AOXcHPk
<?php
$str = "sidePanel[]=1&sidePanel[]=2&sidePanel[]=4";
$sidePanelArr = explode('&', $str);
$newVal = 'sidePanel[]=3';
$insertAt = 2 ;
$newArr = array_merge(array_slice($sidePanelArr, 0,$insertAt),
array($newVal),
array_slice($sidePanelArr,$insertAt)
);
$sidePanel = implode('&', $newArr);
echo $sidePanel,PHP_EOL ;
?>
答案 2 :(得分:1)
您可以使用parse_str将其转换为数组,并在以下位置找到要插入的值:
// Turn it into an array
$url = parse_str($_SESSION['sidePanel']));
// What value do we want to insert it after
$insert_after = 2;
// The value you want to insert
$sidePanel = 3;
// Find the position of $insert_after
$offset = array_search($insert_after, $url['sidePanel']);
// Slice the array up (based on the value)
$url['sidePanel'] = array_merge(array_slice($url['sidePanel'], 0, $offset),
array($sidePanel),
array_slice($url['sidePanel'], $offset));
// Turn it back into a string
echo http_build_query($url);