Php 仅基于已知关键帧创建多维数组
我正在尝试将字符串转换为只允许使用键的多维数组 给定字符串:Php 仅基于已知关键帧创建多维数组,php,Php,我正在尝试将字符串转换为只允许使用键的多维数组 给定字符串: “类型:蓝色,类型:红色,班次:第二,班次:第一,类别:圆圈,系统:未知” 使用唯一可能的键: $possibleKeys = [ "category", "shift", "type" ]; 创建阵列: $searchArray = array( "type" => [ "blue", "red" ], "shift" => [ "second", "first" ],
“类型:蓝色,类型:红色,班次:第二,班次:第一,类别:圆圈,系统:未知”
使用唯一可能的键:
$possibleKeys = [ "category", "shift", "type" ];
创建阵列:
$searchArray = array( "type" => [ "blue", "red" ],
"shift" => [ "second", "first" ],
"category" => [ "circle" ]
);
因此,system:unknown
不会添加到$searchArray
中,因为它不在$possibleKeys
数组中
这是我的密码:
$myString = "type:blue, type:red, shift:second, shift:first, category:circle, system:unknown";
$params = explode( ",", $myString );
$possibleKeys = [ "category", "shift", "type", "chances" ];
$nodes = [];
foreach ($params as $param) {
$node = explode( ":", $param );
if (array_key_exists( $node[ 0 ], $nodes ) && in_array( $node[ 0 ], $possibleKeys )) {
array_push( $nodes[ $node[ 0 ] ], $node[ 1 ] );
} else {
$nodes[ $node[ 0 ] ] = $node[ 1 ];
}
}
但是当Ivar_dump
时,数组是垃圾,一些键有额外的空格
array(4) {
["type"]=>
string(9) "blue"
[" type"]=>
string(8) "red"
[" shift"]=>
string(5) "first"
[" category"]=>
string(3) "circle"
}
我做错了什么?因为你用“,”尝试用“,”(逗号空格)来爆炸。因为你用“,”尝试用“,”(逗号空格)来爆炸。你可以对你的代码做一些小的调整,避免使用一些额外的方法,比如
trim()
或array\u key\u exits()
演示:您可以对代码进行一些小的调整,并避免使用一些额外的方法,如
trim()
或array\u key\u exits()
演示:首先使用允许的键构建关联数组 将字符串拆分-首先用逗号分隔符将
分解成一个数组以获得对,然后对每对进行修剪和分解。如果左侧是允许的关键点,请将右侧添加到关联数组元素。像往常一样不止一种方法,但这正是我目前咖啡因水平所要求的
Array
(
[category] => Array
(
[0] => circle
)
[shift] => Array
(
[0] => second
[1] => first
)
[type] => Array
(
[0] => blue
[1] => red
)
)
首先使用允许的关键点构建关联数组
将字符串拆分-首先用逗号分隔符将分解成一个数组以获得对,然后对每对进行修剪和分解。如果左侧是允许的关键点,请将右侧添加到关联数组元素。像往常一样不止一种方法,但这正是我目前咖啡因水平所要求的
Array
(
[category] => Array
(
[0] => circle
)
[shift] => Array
(
[0] => second
[1] => first
)
[type] => Array
(
[0] => blue
[1] => red
)
)
您可以使用正则表达式查找值并仅循环可能的键。
这意味着它只需进行三次迭代即可找到所有值并将其放入数组中。
preg_匹配将在完整字符串中找到与键连接的所有单词
array(3) {
["category"]=>
array(1) {
[0]=>
string(6) "circle"
}
["shift"]=>
array(2) {
[0]=>
string(6) "second"
[1]=>
string(5) "first"
}
["type"]=>
array(2) {
[0]=>
string(4) "blue"
[1]=>
string(3) "red"
}
}
输出为:
您可以使用正则表达式查找值并仅循环可能的键。
这意味着它只需进行三次迭代即可找到所有值并将其放入数组中。
preg_匹配将在完整字符串中找到与键连接的所有单词
array(3) {
["category"]=>
array(1) {
[0]=>
string(6) "circle"
}
["shift"]=>
array(2) {
[0]=>
string(6) "second"
[1]=>
string(5) "first"
}
["type"]=>
array(2) {
[0]=>
string(4) "blue"
[1]=>
string(3) "red"
}
}
输出为:
正确。它没有添加到数组中。明白了。抱歉,没有注意到您添加了该信息。找到了解决办法。将其作为答案发布。应用trim()
。我再花半个小时。旅行<代码>:(
我必须说这是一个非常精确的问题。+1更正。它没有添加到数组中。明白了。抱歉,没有注意到您添加了该信息。找到了解决方案。将其作为答案发布。应用trim()
。我将再花半个小时。旅行。:(
我必须说这是一个很好的问题。+1我喜欢这个解决方案,因为它不需要我有一个额外的忽略键数组。@user-44651公平地说,我相信Ivans的答案也不需要它。我喜欢这个解决方案,因为它不需要我有一个额外的忽略键数组。@user-44651公平地说,我喜欢它ieve Ivans answer不需要它。此答案表示如果字符串中添加了任何新的不需要的项,则必须手动将项添加到忽略数组。此答案表示如果字符串中添加了任何新的不需要的项,则必须手动将项添加到忽略数组
array(3) {
["category"]=>
array(1) {
[0]=>
string(6) "circle"
}
["shift"]=>
array(2) {
[0]=>
string(6) "second"
[1]=>
string(5) "first"
}
["type"]=>
array(2) {
[0]=>
string(4) "blue"
[1]=>
string(3) "red"
}
}