PHP删除数组中特定索引的值,操作值,然后将值替换为相同的数组

时间:2011-10-30 01:04:24

标签: php arrays

试图弄清楚如何为数组中的特定索引提取值,对其进行操作,然后将值替换回原始位置的数组。

我从上传CSV的表单POST中获得了一个数组:

if(isset($_POST['submit'])){
  $csvFile = $_FILES['csv']['tmp_name'];
  $handle = fopen($csvFile,"r");
  $fileop = fgetcsv($handle,1000,",");
}

上传的CSV文件通常包含20到100行,包含5列(索引键)。以下是print_r($fileop) while循环中仅有2条记录的示例。

HTML展示:

Array
(
    [0] => Chevy
    [1] => Sedan
    [2] => Malibu
    [3] => <a href="#"><img href="http://www.domain.co/logo.png" alt="Pic" /></a>
    [4] => 8000.00
)
Array
(
    [0] => Chevy
    [1] => Pickup
    [2] => 2500
    [3] => <a href="#"><img href="http://www.domain.co/logo.png" alt="Pic" /></a>
    [4] => 18000.00
)

以下是我想要完成的一些例子。

编辑#1:

$imageLink = stripslashes($fileop[3]);
str_replace("http://www.domain.co/logo.png","/images/logo.png",$imageLink);

编辑#2:

$model = stripslashes($fileop[2]);
$preHTML = <div id="model" style="clear:both"><strong>;
$postHTML = </strong></div>;
$fullHTML = $preHTML . $model . $postHTML;

新HTML展示:

Array
(
    [0] => Chevy
    [1] => Sedan
    [2] => <div id="model" style="clear:both"><strong>Malibu</strong></div>
    [3] => <a href="#"><img href="/images/logo.png" alt="Pic" /></a>
    [4] => 8000.00
)
Array
(
    [0] => Chevy
    [1] => Pickup
    [2] => <div id="model" style="clear:both"><strong>2500</strong></div>
    [3] => <a href="#"><img href="/images/logo.png" alt="Pic" /></a>
    [4] => 18000.00
)

大问题:如何将这些被操纵的值返回到数组?

我一直在搜索这几个小时,现在我已经超负荷而且更加困惑。非常感谢任何帮助!

更新:

我一直在玩下面提供的一些答案,到目前为止还没有多少运气。它确实可以更新从CSV文件中检索到的“堆叠”数组中的单个数组,但我无法让它更新特定键的所有数组并保留“堆叠”数组。

我不确定我是否正在使用“堆叠阵列”的正确术语,但基本上如果我从CSV循环堆叠阵列,我会得到许多单个阵列的打印输出,所以当它进入MySQL数据库时,我可以通过数组循环并将它们作为单独的记录写入。

我尝试了以下操作,它丢失了所有其他数组,只保留了第一个修改过的数组:

while(($fileop = fgetcsv($handle,1000,",")) != false){
    $model = stripslashes($fileop[2]);
    $fileop[2] = '<div id="model" style="clear:both"><strong>'.$model.'</strong></div>';
}

现在进行以下打印时,我没有得到所有数组:

<pre>
<?php
while(($fileop = fgetcsv($handle,1000,",")) != false){
    print_r($fileop);
}
?>
</pre>

HTML结果(只有1个数组,所有其他“堆叠数组”丢失且不打印):

Array
(
    [0] => Chevy
    [1] => Sedan
    [2] => Malibu
    [3] => <a href="#"><img href="http://www.domain.co/logo.png" alt="Pic" /></a>
    [4] => 8000.00
)

4 个答案:

答案 0 :(得分:1)

以下内容适用于您:

<?php
$arr = array();
while(($fileop = fgetcsv($handle,1000,",")) != false){
    $arr[] = $fileop;
}


foreach ( $arr as $k => $v ) {
    $model = stripslashes($v[2]);
    $preHTML = '<div id="model" style="clear:both"><strong>';
    $postHTML = '</strong></div>';
    $fullHTML = $preHTML . $model . $postHTML;
    $arr[$k][2] = $fullHTML;

    $imageLink = stripslashes($v[3]);
    $arr[$k][3] = str_replace("http://www.domain.co/logo.png","/images/logo.png",$imageLink);
}

print_r($arr);

示例输出:

Array
(
    [0] => Array
        (
            [0] => Chevy
            [1] => Sedan
            [2] => <div id="model" style="clear:both"><strong>Malibu</strong></div>
            [3] => <a href="#"><img href="/images/logo.png" alt="Pic" /></a>
            [4] => 8000.00
        )

    [1] => Array
        (
            [0] => Chevy
            [1] => Pickup
            [2] => <div id="model" style="clear:both"><strong>2500</strong></div>

            [3] => <a href="#"><img href="/images/logo.png" alt="Pic" /></a>
            [4] => 18000.00
        )

)

答案 1 :(得分:0)

$cars = array();

while(($fileop = fgetcsv($handle,1000,",")) != false){
    $model = stripslashes($fileop[2]);
    $fileop[2] = '<div id="model" style="clear:both"><strong>'.$model.'</strong></div>';
    $cars[] = $fileop;
}

print_r($cars);

答案 2 :(得分:0)

您可以像检索其值一样简单地引用数组值,但可以在赋值运算符的左侧使用它。例如,您的编辑#1将变为:

$imageLink = stripslashes($fileop[3]);
$fileop[3] = str_replace("http://www.domain.co/logo.png","/images/logo.png",$imageLink);

答案 3 :(得分:0)

从你的问题我开始明白你的主要问题是删除元素和索引。似乎支持问题可以从答案的其余部分解决

说,有一个数组

$var = Array(
             'index1' => 'one content',
             'index2' => 'another content',   
             'index3' => 'again another content'
            );

删除数组的索引内容(比如说 index2 ),你必须使用

unset($var['index2']);

这是如何删除索引本身的内容

echo $var;
--------------------------
Array(
        'index1' => 'one content'   
        'index3' => 'again another content'
)

如果我回答你的问题,请告诉我