【问题标题】:Variable in Array won't work数组中的变量不起作用
【发布时间】:2014-06-06 02:07:12
【问题描述】:

我在数组中添加了一个带有长句子的变量,并且我有正确的语法来分隔单词。然而,当我尝试显示数组键 1,2,3,... 时,我收到错误 Undefined offset

这是我的示例代码:

$quote = '"'; 
$string = $quote.'asds dasddsfaf fdf
ewfejfierjfnsdafjafj sdf dwiofjwejf iosad dsfosdofjeijfmkslad f
dfsijioewjo fsdlfa'.$quote; 
$newstring = implode('", "', preg_split('/[\s]+/', $string)); 
$arrayz = array($newstring); 
echo $arrayz[2];

回声 $newstring 给了我: "asds", "dasddsfaf", "fdf", "ewfejfierjfnsdafjafj", "sdf", "dwiofjwejf", "iosad", "dsfosdofjeijfmkslad", "f", "dfsijioewjo", "fsdlfa"

【问题讨论】:

  • $arrayz 只有一个索引[0],由您使用array($newstring) 定义
  • 您将其内爆回以逗号分隔的字符串。始终使用 var_dump($newstring) 之类的东西进行调试,看看你有什么。您将该字符串放入数组$arrayz,然后该数组只有一个元素。
  • @MichaelBerkowski 我的最终目标是$arrayz = array( "asds" , "dasddsfaf" , "fdf" ........ ); 我认为我做得对吗?
  • @user3395049 这就是preg_split() 产生的。如果你跳过implode() 和后面的所有内容,将preg_split() 的输出分配给一个数组,你就会得到你想要的。
  • 移除内爆就可以了。您正在将数组合并回一个字符串。

标签: php arrays variables


【解决方案1】:

我认为你把事情复杂化了。此处无需使用preg_split。只需使用explode()。试试这个:

$commer = '"'; 
$string = $commer.'asds dasddsfaf fdf
ewfejfierjfnsdafjafj sdf dwiofjwejf iosad dsfosdofjeijfmkslad f
dfsijioewjo fsdlfa'.$commer;

$newstring = explode(' ', $string);

print_r($newstring);

输出:

Array
(
    [0] => "asds
    [1] => dasddsfaf
    [2] => fdf
    [3] => ewfejfierjfnsdafjafj
    [4] => sdf
    [5] => dwiofjwejf
    [6] => iosad
    [7] => dsfosdofjeijfmkslad
    [8] => f
    [9] => dfsijioewjo
    [10] => fsdlfa"
)

编辑,基于评论。这应该可以满足您的要求:

$commer = '"'; 
$string = 'asds dasddsfaf fdf ewfejfierjfnsdafjafj sdf dwiofjwejf iosad dsfosdofjeijfmkslad f dfsijioewjo fsdlfa'; 

$arrayz = array();
foreach(explode(' ', $string) as $word) {
    $arrayz[] = $commer . $word . $commer;
}

print_r($arrayz);

输出:

Array
(
    [0] => "asds"
    [1] => "dasddsfaf"
    [2] => "fdf"
    [3] => "ewfejfierjfnsdafjafj"
    [4] => "sdf"
    [5] => "dwiofjwejf"
    [6] => "iosad"
    [7] => "dsfosdofjeijfmkslad"
    [8] => "f"
    [9] => "dfsijioewjo"
    [10] => "fsdlfa"
)

【讨论】:

  • 谢谢,工作:) 有没有办法不仅用''(空格)爆炸,而且用所有特殊字符爆炸?
  • 您可以根据任何特定的字符或字符串展开。但是如果你想根据一系列可能的字符进行爆炸,你需要使用正则表达式......所以回到preg_split('/YOUR REGEX/', $string)......
  • 找到了一个不错的解决方法 :) phpdevtips.com/2011/07/…
【解决方案2】:
$commer = '"'; 
$string = $commer.'asds dasddsfaf fdf
ewfejfierjfnsdafjafj sdf dwiofjwejf iosad dsfosdofjeijfmkslad f
dfsijioewjo fsdlfa'.$commer; 
$arrayz = preg_split('/[\s]+/', $string); 
echo $arrayz[2];

使用preg_split('/[\s]+/', $string, -1, PREG_SPLIT_NO_EMPTY); 也是一个好主意,这样在出现双空格、前导空格或尾随空格时,您不会得到空条目。

【讨论】:

  • 我认为 $commer 是无关紧要的,根据问题下方的 OP 评论。
【解决方案3】:

您只分配了一个数组中的一个元素,因此数组的大小只有 1 即;您只能访问 $arrayz[0]。 尝试循环使用,直到字符串结束并同时存储。 这可能会解决。

【讨论】:

    【解决方案4】:

    array($var) 从另一个数组(如果$var 是一个数组)创建一个数组,否则创建一个单元素数组。由于implode() 从内爆数组返回stringarray($newstring) 将创建一个作为内爆字符串的单元素数组!

    【讨论】:

    • 我只是在解释你遇到的undefined offset 错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多