【问题标题】:using trim with arrays in php在 php 中使用带有数组的修剪
【发布时间】:2011-01-18 11:09:20
【问题描述】:

我有以下数组

Array ( [0] =>  [1] => Commodities [2] => Crude Oil [3] => 91.46 [4] => + 0.48% [5] => Natural Gas [6] => 4.54 [7] => + 0.38% [8] => Gasoline [9] => 2.49 [10] => + 0.49% [11] => Heating Oil [12] => 2.65 [13] => + 0.84% [14] => Gold [15] => 1368.07 [16] => + 0.40% [17] => Silver [18] => 28.78 [19] => + 1.62% [20] => Copper [21] => 4.41 [22] => + 0.14% [23] => Quotes delayed 15 min. [24] => » Add to your site )

我想要一个像

这样的数组
Array([0]=>Array
(name => Crude oil
price => 91.46
precent => +0.48)
[1]=>Array
(name => Natural Gas
...
..
and so on upto Copper
)

我尝试过使用

for ($i = 2; $i <6 ; $i = $i +3) {
   $commoditiesdatagot[] = array (
   trim($arraymain[$i]),
   trim($arraymain[$i +1]),
   trim($arraymain[$i +2])
   );
  }

但我不断收到以下错误 -

PHP Warning:  Module 'mcrypt' already loaded in Unknown on line 0
PHP Notice:  Undefined offset:  25 in /var/www/html/iphorex/live/commodities.php on line 51

Notice: Undefined offset:  25 in /var/www/html/iphorex/live/commodities.php on line 51
PHP Notice:  Undefined offset:  26 in /var/www/html/iphorex/live/commodities.php on line 49

Notice: Undefined offset:  26 in /var/www/html/iphorex/live/commodities.php on line 49
PHP Notice:  Undefined offset:  27 in /var/www/html/iphorex/live/commodities.php on line 50

第 51 行是trim($arraymain[$i +2])

任何帮助............

【问题讨论】:

  • 你不想修剪你的预期结果是不同的结构数组
  • 能否请您提供输入数组var_export。我没有心情将其转换回可解析的表示形式。
  • 您显示的代码是否正确?您的循环受$i&lt;6 的约束。 $i+2 怎么可能是 25 岁。
  • 25/3 返回分数,这是你需要的吗?

标签: php arrays trim


【解决方案1】:

您可以使用array_walk() 通过回调函数执行此操作:

// Define callback function, note &$item is passed by reference
function trim_r(&$item, $key)
{
    // If the item is an array, recursively use array_walk 
    if(is_array($item))
        array_walk($item, 'trim_r');
    // Trim the item
    else if(is_string($item))
        $item = trim($item);
}

// This is an example array
$yourArray = array(" Jake ", " John ", array( " Helen "));

// Show the array without being trimmed
var_dump($yourArray);

// Trim the array
array_walk($yourArray, 'trim_r');

// Display the trimmed array
var_dump($yourArray);

【讨论】:

【解决方案2】:

问题不在于 trim()。在您的 for() 循环中,您将 $i 变量发送到 25, 26, 27 ([$i], [$i+1], [$i+2]) 而 $arraymain 中有 24 个元素。

$arraymain = array_slice($arraymain,2,-2); for ($i = 0; $i print_r($arraymain);

【讨论】:

    【解决方案3】:

    您必须检查您的循环是否使用了正确的间隔。错误消息告诉您,您尝试访问数组中位置为 25 和 26 的变量,但您的数组只有 25 个由 0 到 24 索引的项目。因此 array[25] 不可用。

    我猜你的循环也可能是这样的:

    $i = 2;
    while($i < count($arraymain)){
       $row = array();
       if(isset($arraymain[$i+2]){
          $row[] = $arraymain[$i]; $i++;
          $row[] = $arraymain[$i]; $i++;
          $row[] = $arraymain[$i]; $i++;
    
          $commoditiesdatagot[] = $row;
        } else error_log("index out of bounce ".$i+2);
    }
    

    【讨论】:

    • 你的数组的结尾现在是额外的行,但还有一些其他信息......所以你也可以尝试检查$i &lt; count($arraymain) - 2
    【解决方案4】:

    这是一个多合一的:

    array_map(                                      // apply
        function($chunk) {                          // this callback that
            return array_combine(                   // makes a new array
                array('name', 'price', 'percent'),  // with these keys
                array_map('trim', $chunk)           // and those trimmed values
            );
        },                                          
        array_chunk(                                // from the chunks of
            array_slice($data, 2, -2),              // this $data array subset
            3                                       // having three chunks each
         )
     );
    

    请注意,这要求输入数据每个商品有 3 个元素。您的输入数组缺少汽油的价格,因此到目前为止提供的任何解决方案都会在创建商品子集时阻塞。

    您还可以在对数组进行分块之前将修剪移到下部。这将只调用一次而不是在单个块上多次调用。但不确定它是否会产生巨大的影响。

    See live demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 2014-12-27
      • 2011-08-11
      • 1970-01-01
      • 2020-04-24
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多