将数组与祖先元素混合

时间:2019-02-04 14:18:37

标签: php arrays

看起来很简单,但是我很想在此上浪费很多时间,但没有成功...

如果我有一个字符串:

$str = "She sells seashells"

所以我把每个单词都变成一个数组元素

$array = explode(" ", $str);

我需要的是,每个单词都接收祖先元素(如果有的话),然后接收下一个元素……

JSON格式的示例结果(更易于显示)

"{"She":["sells","seashells"],"sells":["She","seashells"],"seashells":["She","sells"]}"

有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

确实,您可以为每个键(不包括该键)复制一个源数组:

$str = "She sells seashells";
$array = explode(" ", $str);

$res = [];
for($i = 0; $i < count($array); $i++) {
    $res[$array[$i]] = $array;
    unset($res[$array[$i]][$i]);
}

print_r($res);

demo

答案 1 :(得分:3)

<?php

$str = "She sells seashells";

$arr = explode(" ",$str);
$length = count($arr);
$result = [];

for($i = 0;$i < $length;++$i){
    $result[$arr[$i]] = [];
    foreach ($arr as $each_val) {
        if($each_val === $arr[$i]) continue;
        $result[$arr[$i]][] = $each_val;
    }
}

echo json_encode($result);

输出:

{"She":["sells","seashells"],"sells":["She","seashells"],"seashells":["She","sells"]}
  • 根据空格展开字符串。
  • 具有一个result数组,并将for循环中的当前迭代值作为它的键。
  • 再次遍历数组,并检查当前值是否与外部for循环值匹配。如果是,则继续,否则在该result数组键中添加该值。
  • 最后,json_encode()完成就可以了。