试图弄清楚如何为数组中的特定索引提取值,对其进行操作,然后将值替换回原始位置的数组。
我从上传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
)
答案 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'
)
如果我回答你的问题,请告诉我