我在将变量转换为数组时遇到问题。 我正在运行 foreach 循环以从多维数组 $images 中获取值。 $images 数组包含图像名称,例如:“Item Blue.png”或“Item Light Oak.png”以及每个图像的 id。
foreach ($images['images'] as $image) {
$image_name = explode(" ", substr_replace($image->filename ,"",-4));
if(!empty($image_name[2])) {
$colour = ucfirst($image_name[1] . " " . $image_name[2]);
}
else {
$colour = ucfirst($image_name[1]);
}
}
$color 变量给我颜色名称,$image->id 可以给我图像 id。
我想用上面的变量构建 $colors 数组,它看起来像这样:
$colors = array(
'Blue' => 1620,
'Green' => 1467,
);
有点像这样:
$colors = array(
'$colour' => $image->id,
);
我不知道如何做到这一点,我将不胜感激任何帮助,至少给我一些指导。
谢谢
这应该非常简单......要做两件事:
首先在 foreach 之外初始化颜色数组:
$colors=array(); //<-- add this
foreach ($images['images'] as $image) {
$image_name = explode(" ", substr_replace($image->filename ,"",-4));
...
然后只需在 if/else 之后添加一行,仍在 foreach 循环内,该循环将向 $colors 数组插入一个新项目。
...
else {
$colour = ucfirst($image_name[1]);
}
$colors[$colour]=$image->id; //<-- add this
}
这将创建一个颜色数组,其中包含您要查找的内容。 我假设 $image 迭代器中有一个 'id' 键。 您需要创建一个吗?
尽管如此,您并没有检查这些问题:
希望有帮助
我担心使用颜色作为键的意图可能是不明智的,因为数据冲突会导致结果数组中的数据丢失。
而是使用 id 作为键并将颜色存储为值。
sscanf()
是隔离颜色字符串的直接方法。 %*s
将匹配(但不捕获输入字符串中的第一个单词。%[^.]
将捕获以下非点字符。
代码:(演示)
$result = [];
foreach ($images['images'] as $id => $obj) {
sscanf($obj->filename, '%*s %[^.]', $colour);
$result[$id] = ucfirst($colour);
}
var_export($result);