PHP:如果数组中存在值,则分配一个新值并将所有值推送到一个新数组
PHP: If value exists in array, assign a new value and push all values to a new array
我想检查数据库中的 JSON 数组是否有值。每个值都对应一个 WordPress 类别 ID。 (例如,"elevator" = 120)
如果它确实存在,我需要将它推送到一个名为 $features 的数组,以便稍后 运行 创建 WordPress post 的脚本,其中将现有数字 (ID) 的数组插入到 post,在这个例子中像这样:
$my_post = array(
'post_title' => $post_title,
'tax_input' => array(
'property_category' => array( $features )
主要代码(我知道我可能还差得远):
$options = explode(",",$db->options);
$features = array();
switch ($features) {
case in_array("basement", $options) && "basement" != false:
array_push($features,145);
break;
case (in_array("bathtub", $options) && "bathtub" != false):
array_push($features,167);
break;
case (in_array("boiler", $options) && "boiler" != false):
array_push($features,105);
break;
}
您可以使用 if
而不是 switch
来实现您的目标
if (in_array("basement", $options)) {
array_push($features,145);
}
if (in_array("bathtub", $options)) {
array_push($features,167);
}
if(in_array("boiler", $options)) {
array_push($features,105);
}
因为 switch 语句的计算结果,例如
switch ([]) {
case true: ...
case false: ...
case true: ...
这与您的意图不符
您这里有很多问题需要解决。首先,我们假设 $options
是一个相当标准的数组:
$options = ['basement', 'bathtub'];
现在您将 $features
设置为一个数组来保存结果:
$features = array();
您不能在 switch
语句中进行大量计算。在语句 in_array("basement", $options) && "basement" != false:
中,您尝试对 "basement" 进行两次测试,而您需要做的只是让 switch
决定信息是否存在。只需测试每个价值购买循环选项并测试价值
foreach($options as $option) {
switch ($option) {
case "basement":
array_push($features,145);
break;
case "bathtub":
array_push($features,167);
break;
case "boiler":
array_push($features,105);
break;
}
}
这里是 results:
print_r($features);
哪个returns
Array
(
[0] => 145
[1] => 167
)
假设您有一个选项值列表,您可以创建一个包含选项和值组合的数组。然后使用 array_intersect_key()
仅匹配所选的选项(使用 array_flip()
使选项值成为键。最后使用 array_values()
删除键...
$options = ['basement', 'bathtub'];
$optionValues = ['basement' => 145, 'bathtub' => 167, 'boiler' => 105];
$features = array_values(array_intersect_key($optionValues, array_flip($options)));
print_r($features);
给...
Array
(
[0] => 145
[1] => 167
)
这样做的好处是when/if你需要改变映射,你只需要更新$optionValues
数组。
我想检查数据库中的 JSON 数组是否有值。每个值都对应一个 WordPress 类别 ID。 (例如,"elevator" = 120)
如果它确实存在,我需要将它推送到一个名为 $features 的数组,以便稍后 运行 创建 WordPress post 的脚本,其中将现有数字 (ID) 的数组插入到 post,在这个例子中像这样:
$my_post = array(
'post_title' => $post_title,
'tax_input' => array(
'property_category' => array( $features )
主要代码(我知道我可能还差得远):
$options = explode(",",$db->options);
$features = array();
switch ($features) {
case in_array("basement", $options) && "basement" != false:
array_push($features,145);
break;
case (in_array("bathtub", $options) && "bathtub" != false):
array_push($features,167);
break;
case (in_array("boiler", $options) && "boiler" != false):
array_push($features,105);
break;
}
您可以使用 if
而不是 switch
if (in_array("basement", $options)) {
array_push($features,145);
}
if (in_array("bathtub", $options)) {
array_push($features,167);
}
if(in_array("boiler", $options)) {
array_push($features,105);
}
因为 switch 语句的计算结果,例如
switch ([]) {
case true: ...
case false: ...
case true: ...
这与您的意图不符
您这里有很多问题需要解决。首先,我们假设 $options
是一个相当标准的数组:
$options = ['basement', 'bathtub'];
现在您将 $features
设置为一个数组来保存结果:
$features = array();
您不能在 switch
语句中进行大量计算。在语句 in_array("basement", $options) && "basement" != false:
中,您尝试对 "basement" 进行两次测试,而您需要做的只是让 switch
决定信息是否存在。只需测试每个价值购买循环选项并测试价值
foreach($options as $option) {
switch ($option) {
case "basement":
array_push($features,145);
break;
case "bathtub":
array_push($features,167);
break;
case "boiler":
array_push($features,105);
break;
}
}
这里是 results:
print_r($features);
哪个returns
Array
(
[0] => 145
[1] => 167
)
假设您有一个选项值列表,您可以创建一个包含选项和值组合的数组。然后使用 array_intersect_key()
仅匹配所选的选项(使用 array_flip()
使选项值成为键。最后使用 array_values()
删除键...
$options = ['basement', 'bathtub'];
$optionValues = ['basement' => 145, 'bathtub' => 167, 'boiler' => 105];
$features = array_values(array_intersect_key($optionValues, array_flip($options)));
print_r($features);
给...
Array
(
[0] => 145
[1] => 167
)
这样做的好处是when/if你需要改变映射,你只需要更新$optionValues
数组。