PHP数组替换问题

时间:2016-06-09 13:35:41

标签: php

所以最近我陷入了某种阵列组合和替换状态。

我有这个阵列:

array(5) {
  ["De"]=>
  string(7) "treatee"
  ["Para"]=>
  string(13) "Cristina Isabel Gnap"
  ["Principio"]=>
  string(36) "Agilidade, como dinâmica de ação."
  ["Descricao"]=>
  string(8) "sadsadsa"
}

我想从['Para']字段中删除中间名,因此我创建了一个for循环:

    for ($i = 0; $i < count($rows); $i++) {
      $array = explode(' ', $rows[$i]['Para']);
      $firstName = $array[0];
      $lastName = $array[count($array) - 1];
      $combineNames= $primeiroNome." ".$ultimoNome;
      $namesCombined= str_split($combineNomes, 30);
      $result = array_replace($rows[$i], $nomesArray);
}

结果当然是显示:

array(5) {
 ["De"]=>
 string(7) "treatee"
 ["Para"]=>
 string(20) "Cristina Isabel Gnap"
 ["Principio"]=>
 string(36) "Agilidade, como dinâmica de ação."
 ["Descricao"]=>
 string(8) "sadsadsa"
 ["0"]=>
 string(13) "Cristina Gnap"
}

但我实际上需要做的是将["Para"]字段替换为新的["0"]字段,但是当我放入{{1}时像for这样的东西它会返回:

$result = array_replace($rows[$i]['Para'], $nomesArray);

任何人都可以帮助我吗? = d

3 个答案:

答案 0 :(得分:0)

要遍历数组,您可以使用foreach循环。 $row的前缀为&,因此您所做的任何更改都将应用于原始数组(通过引用传递)。

foreach ($rows as &$row) {

  $original_string = $row['Para'];  

  // make your changes here and assign the new value to $new_string

  $row['Para'] = $new_string;
}

供参考,
http://php.net/manual/en/control-structures.foreach.php
http://php.net/manual/en/language.references.pass.php

答案 1 :(得分:0)

您可以使用preg_split和foreach循环的组合来实现,如下所示。顺便说一句,您可以测试结果here:

    <?php
        $arr = [
        "De"        =>"treatee",
        "Para"      => "Cristina Isabel Gnap",
        "Principio" =>"Agilidade, como dinâmica de ação.",
        "Descricao" =>"sadsadsa",
        ];

        var_dump($arr);


        foreach($arr as $key=>&$value){
            if($key == "Para"){
                if(is_string($value)) {
                    $arrSplits = preg_split("#\s#", $value);
                    if (count($arrSplits) == 3) {
                        unset($arrSplits[1]);
                        $arr[$key] = implode(" ", $arrSplits);
                    }
                }
            }
        }

        var_dump($arr);

第一次VAR_DUMP结果

        array (size=4)
          'De' => string 'treatee' (length=7)
          'Para' => string 'Cristina Isabel Gnap' (length=20)
          'Principio' => string 'Agilidade, como dinâmica de ação.' (length=42)
          'Descricao' => string 'sadsadsa' (length=8)

结果为2ND VAR_DUMP

        array (size=4)
          'De' => string 'treatee' (length=7)
          'Para' => string 'Cristina Gnap' (length=13)
          'Principio' => string 'Agilidade, como dinâmica de ação.' (length=42)
          'Descricao' => string 'sadsadsa' (length=8)

或者,你可以将上面的内容封装到一个接受数组的函数中并传入你的数组,如下所示:

    <?php 
        function removeMiddleNamesFromArray(&$dataArray){
            foreach($dataArray as $key=>&$value){
                if($key == "Para"){
                    if(is_string($value)){
                        $arrSplits      = preg_split("#\s#", $value);
                        if( count($arrSplits) == 3){
                            unset($arrSplits[1]);
                            $arr[$key]  = implode(" ", $arrSplits);
                        }
                    }
                }
            }
            return $dataArray;
        }

        var_dump(removeMiddleNamesFromArray($arr));

<强>转储

        array (size=4)
          'De' => string 'treatee' (length=7)
          'Para' => string 'Cristina Gnap' (length=13)
          'Principio' => string 'Agilidade, como dinâmica de ação.' (length=42)
          'Descricao' => string 'sadsadsa' (length=8)

或者,你可以将上面的内容封装到一个接受数组的函数中并传入你的数组,如下所示:

答案 2 :(得分:0)

请使用unset()函数

$array = array {
  ["De"]=>
  string(7) "treatee"
  ["Para"]=>
  string(13) "Cristina Isabel Gnap"
  ["Principio"]=>
  string(36) "Agilidade, como dinâmica de ação."
  ["Descricao"]=>
  string(8) "sadsadsa"
}

unset($array['pra']);