php - PHP 根据另一个数组的值创建新数组
问题描述
我有一个简单的 PHP 多维数组,我想遍历它,特别是具有名称的数组,License
并将所有values
以相同第一个单词开头的项目添加到它自己的数组中(键设置为该单词)。
这个想法是我最终会得到类似的东西:
[desktop] => Array(
[0] => 1–3 users
[1] => 4–6 users
[2] => 7–10 users
)
[web] => Array(
[0] => 10k views/month
[1] => 25k views/month
[2] => 50k views/month
)
[app] => Array(
[0] => 5k downloads
[1] => 5k–10k downloads
[2] => 10k–25k downloads
)
这是我正在使用的数组的一个示例$product['options']
Array
(
[0] => Array
(
[id] => 6059896471689
[product_id] => 4678842515593
[name] => Class
[position] => 1
[values] => Array
(
[0] => Regular
[1] => Oblique
[2] => Family
)
)
[1] => Array
(
[id] => 6355533201545
[product_id] => 4678842515593
[name] => License
[position] => 2
[values] => Array
(
[0] => Desktop 1–3 users
[1] => Desktop 4–6 users
[2] => Desktop 7–10 users
[3] => Desktop 11–15 users
[4] => Desktop 16–25 users
[5] => Desktop 25–50 users
[6] => Desktop 51–100 users
[7] => Desktop 101–150 users
[8] => Desktop 151–250 users
[9] => Desktop 251–400 users
[10] => Desktop 401–700 users
[11] => Desktop 701–1000 users
[12] => Desktop 1000+ users
[13] => Web 10k views/month
[14] => Web 25k views/month
[15] => Web 50k views/month
[16] => Web 100k views/month
[17] => Web 250k views/month
[18] => Web 500k views/month
[19] => Web 750k views/month
[20] => Web 1m+ views/month
[21] => App 5k downloads
[22] => App 5k–10k downloads
[23] => App 10k–25k downloads
[24] => App 25k–50k downloads
[25] => App 50–100k downloads
[26] => App 100k–250k downloads
[27] => App 250k–500k downloads
[28] => App 500k–1m downloads
[29] => App 1m+ downloads
)
)
)
这就是我目前所处的位置:
foreach ($product['options'] as $option) {
if ($option['name'] == 'Style') {
$optionTitle = 'Select your fonts';
} elseif ($option['name'] == 'License') {
$optionTitle = 'Please select the type of license(s) you require';
} else {
$optionTitle = '';
}
$optionValues = array();
foreach ($option['values'] as $value) {
if ($option['name'] == 'License') {
// 3 different arrays to be added to $optionValues (desktop, web, app) HOW?
//substr(strstr($value, ' '), 1);
} else {
$optionValues[] = $value;
}
}
if ($option['name'] == 'License') {
$optionValues['desktop'] = ???;
$optionValues['web'] = ???;
$optionValues['app'] = ???;
}
$productOptions[] = array(
'name' => $option['name'],
'title' => $optionTitle,
'values' => $optionValues
);
}
解决方案
要创建根据需要拆分的数据,您可以只使用explode()
一个空格,但将其限制为 2 个项目。第一个是类型,第二个是范围。然后使用这些值将项目添加到$optionValues
数组中。
所以像...
if ($option['name'] == 'License') {
list($type, $range) = explode(" ", $value, 2);
$optionValues[$type][] = $range;
} else {
您还可以删除以下代码...
if ($option['name'] == 'License') {
$optionValues['desktop'] = ???;
$optionValues['web'] = ???;
$optionValues['app'] = ???;
}
推荐阅读
- dynamics-crm - Dynamics 365 Workflow 将所有记录的字段设置为“是”
- android - MediaDrmStateException:无法处理关键响应:一般 DRM 错误
- ios - 仍然出现错误此应用有 1 个未处理的崩溃。上传 1 个 dSYM 文件以处理它们
- python - 如何在 SUDS 中注入错过的命名空间?
- express - Web3js:如何在自定义区块链上显示待处理的交易
- linux - Docker -json.log 文件清理
- c++ - 未初始化的引用是零初始化的,未初始化的标量是默认初始化的吗?
- java - Apache Ignite:在 Java 中触发/发出用户定义事件的最佳实践是什么?
- malware - 应用程序检测为恶意软件
- linux - Bad : $ ($) 中的修饰符