【问题标题】:Splitting up a string - php拆分字符串 - php
【发布时间】:2013-07-19 15:08:01
【问题描述】:

我有一个名为 $result 的数组,如下所示:

array(1) 
    { ["response"]=> array(3) 
        { [0]=> array(1) 
            { ["list"]=> array(2) 
                { ["category"]=> string(6) "(noun)" 
                ["synonyms"]=> string(27) "chelonian|chelonian reptile" } 
            } 
          [1]=> array(1) 
            { ["list"]=> array(2) 
                { ["category"]=> string(6) "(verb)" 
                  ["synonyms"]=> string(57) "capsize|turn turtle|overturn|turn over|tip over|tump over" } 
            } 
          [2]=> array(1) 
            { ["list"]=> array(2) 
                { ["category"]=> string(6) "(verb)" 
                  ["synonyms"]=> string(29) "hunt|run|hunt down|track down" } 
            } 
         } 
    }

我正在尝试访问 ["synonyms"] 元素,然后拆分每个单词并将其存储在自己的字符串中,或​​者可能是所有单词的数组。可以看到单词之间用| 符号隔开。

我试过下面的代码,但是没有用(结果没有显示,所以explode没用):

$i=0;

foreach ($result["response"] as $value) 
{ 
 foreach ($value["list"]["synonyms"] as $temp)
  {
  $alternative[$i] = explode ("|", $temp);
  $i++;
  }

}

//OUTPUT THE RESULTS

$j=0;

foreach ($alternative as $echoalternative)
{
echo $j.": ".$echoalternative;
$j++;
}

有什么想法吗?谢谢大家。

【问题讨论】:

  • 没用怎么办?没有结果?炸错了?你的服务器崩溃了?踢了你的狗?
  • Sorry @Marc B.. 我添加了一个注释,我以后会更加小心!

标签: php arrays string foreach explode


【解决方案1】:

您正在尝试遍历内部 foreach 中的字符串。试试

foreach ($result["response"] as $value) 
{ 

  $alternative[$i] = explode ("|", $value["list"]["synonyms"]);
  $i++;


}

【讨论】:

  • 感谢斯蒂芬,这将导致以下结果(我现在正在尝试实施下一步!)array(3) { [0]=> array(2) { [0]=> string(9) "chelonian" [1]=> string(17) "chelonian reptile" } [1]=> array(6) { [0]=> string(7) "capsize" [1]=> string(11) "turn turtle" [2]=> string(8) "overturn" [3]=> string(9) "turn over" [4]=> string(8) "tip over" [5]=> string(9) "tump over" } [2]=> array(4) { [0]=> string(4) "hunt" [1]=> string(3) "run" [2]=> string(9) "hunt down" [3]=> string(10) "track down" } }
  • @Jenny 你想要的最终结果是什么?
  • 嘿斯蒂芬,刚刚看到你的评论。我目前正在尝试一切,有点背景:同义词是由用户搜索生成的。最终目标是将每个同义词变成一个列表,如 dogpile.com 搜索页面上所示(在左侧导航栏中搜索某些内容后......同义词将列在..are you looking for? 下)我认为它会最好将同义词放在一维数组中?
  • @Jenny 但是由于您有多个单词,每个单词都有自己的同义词,所以多维数组似乎是必要的,除非您要将同义词一起存储到一个字符串中(您显然不想这样做)。也许是一个数组数组,每个键都是单词,每个值都是同义词数组?
  • 谢谢斯蒂芬TG。把单词分开真是太好了。我会弄清楚下一步该做什么(希望,如果没有,我会回到这里!)
【解决方案2】:

要创建一维数组的数组(假设您的原始数组中有三个组),您可以执行以下操作:

$out = array();
foreach ($arr['response'] as $key => $value){
    $syns = explode('|', $value['list']['synonyms']);
    foreach ($syns as $key2 => $value2){
        $out[$key][] = $value2;
    }
}

要访问索引为 0 的同义词组的一维数组,只需执行以下操作:

var_dump($out[0]);

Array(
    [0] => chelonian
    [1] => chelonian reptile
)

如果你只想显示同义词,你可以这样做:

foreach ($arr['response'] as $key => $value){
    $syns = explode('|', $value['list']['synonyms']);
    foreach ($syns as $key2 => $value2){
        echo $value2.', ';
    }
    echo "<br />";
}

输出:

chelonian, chelonian reptile,
capsize, turn turtle, overturn, turn over, tip over, tump over,
hunt, run, hunt down, track down, 

但是,如果您想将其包含在原始数组中,您可以这样做:

array_walk_recursive($arr, function (&$e, $k){
    if (preg_match('#[\w\|]+#', $e)){
        $e = explode('|', $e);
    }
});
var_dump($arr);

输出:

Array(
    [response] => Array
            [0] => Array(
                    [list] => Array(
                            [category] => Array(
                                    [0] => (noun)
                                )
                            [synonyms] => Array(
                                    [0] => chelonian
                                    [1] => chelonian reptile
                                )
                        )
                )
            [1] => Array(
                    [list] => Array(
                            [category] => Array(
                                    [0] => (verb)
                                )
                            [synonyms] => Array(
                                    [0] => capsize
                                    [1] => turn turtle
                                    [2] => overturn
                                    [3] => turn over
                                    [4] => tip over
                                    [5] => tump over
                                )
                        )
                )
            [2] => Array(
                    [list] => Array(
                            [category] => Array(
                                    [0] => (verb)
                                )
                            [synonyms] => Array(
                                    [0] => hunt
                                    [1] => run
                                    [2] => hunt down
                                    [3] => track down
                                )
                        )
                )
        )
)

【讨论】:

  • 从 Jenny 的尝试看来,他们似乎希望将拆分同义词放在一个单独的数组中
  • 大家好,我目前正在尝试一切,有点背景:同义词是由用户搜索生成的。最终目标是将每个同义词变成一个列表,如本页所示(左侧导航栏...您在寻找吗?)...dogpile.com/info.dogpl.t10.3/search/… ....我认为最好将同义词放在一个一维数组?
  • 谢谢 Pe de Leao,如果我能接受多个答案,我会的,Stephen 早几分钟就到了 :P.. 你们俩都帮了大忙 :)
【解决方案3】:

以下重构代码应该可以解决问题

$i=0;

foreach ($result["response"] as $value) 
{ 
// print_r($value);
$temp = $value["list"]["synonyms"];
// echo $temp;
 // foreach ($value["list"]["synonyms"] as $temp)
  // {
  $alternative[$i] = explode ("|", $temp);
  $i++;
  // }

}

//OUTPUT THE RESULTS

$j=0;

foreach ($alternative as $echoalternative)
{
print_r($echoalternative);
echo $j.": ".$echoalternative;
$j++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2020-09-09
    相关资源
    最近更新 更多