我有这段代码:
$sample = '5ml milk, 5ml water, 3pcs carrots';
echo $sample."</br>";
$first_slice = explode(',',$sample);
foreach($first_slice as $key => $value)
{
$second_slice[$key] = explode(' ',$value);
}
print_r($second_slice);
它做我想要的,我需要从5毫升水和3个胡萝卜中分离5毫升牛奶 从那里我需要再从牛奶中分离出5ml。
我的问题是,我如何选择/仅回收5ml和牛奶作为单个数据。
以上代码生成结果:
数组([0] =&gt;数组([0] =&gt; 5ml [1] =&gt;牛奶)[1] =&gt;数组([0] =&gt; [1] =&gt; 5ml [2] =&gt;水)[2] =&gt;数组([0] =&gt; [1] =&gt; 3pcs [2] =&gt; 胡萝卜))
我很困惑我如何选择/回声,因为我爆炸了两次意味着它是一个数组内的数组。如果我的理解是错误的,请纠正我。
其他问题:我必须将它爆炸三次。由于我的表有名称,数量,单位列。 成分名称的名称,数量的数量,计量单位的单位。
分别[牛奶] [5] [ml]
我已经做了同样的事情来制作另一个用于分离测量和数量的数组。但它取消了冗余。
foreach($second_slice as $key=>$value)
{
$arr = explode('-',$value);
$third_slice[$arr[1]] = $arr[0];
}
输出结果为:
数组([ml] =&gt; 5 [pcs] =&gt; 3)
字符串上有2个5ml。我怎么不避免它被取出?因为它们是独立的成分。
答案 0 :(得分:1)
目前,您有一个多维数组。您可以简化此方法并将阵列展平为一个维度。我建议您修改foreach
循环,如下所示:
foreach($first_slice as $key => $value)
{
$arr = explode(' ', trim($value));
$second_slice[$arr[1]] = $arr[0];
}
print_r($second_slice);
产生输出:
Array
(
[milk] => 5ml
[water] => 5ml
[carrots] => 3pcs
)
现在,要获取任何项目的数量,您可以直接执行echo $second_slice['item_name']
。
如果您想从金额中找到数量的名称,可以使用array_search()
:
$searchFor = '3pcs';
echo array_search($searchFor, $second_slice);
输出:
carrots
如果有多个具有相同金额的数量,则上述方法仅返回第一个。如果您想获得所有这些内容,可以使用array_filter()
:
$result = array_filter($second_slice, function($elem) use ($searchFor){
return ($elem == $searchFor);
});
print_r($result);
输出:
Array
(
[milk] => 5ml
[water] => 5ml
)
答案 1 :(得分:0)
您只想输出5ml milk
?因为如果是这样,只需执行以下操作:
echo $first_slice[0];
答案 2 :(得分:0)
存在隐藏的空白问题,但您可以使用trim使用以下代码轻松修复它:
$sample = '5ml milk, 5ml water, 3pcs carrots';
echo $sample."</br>";
$first_slice = explode(',',$sample);
foreach($first_slice as $key => $value)
{
$second_slice[$key] = explode(' ',trim($value));
}
print_r($second_slice);
生成以下数组:
Array
(
[0] => Array
(
[0] => 5ml
[1] => milk
)
[1] => Array
(
[0] => 5ml
[1] => water
)
[2] => Array
(
[0] => 3pcs
[1] => carrots
)
)
答案 3 :(得分:0)
有几种方法可以实现这一目标。这是一种方式:
$sample = '5ml milk, 5ml water, 3pcs carrots';
$items = explode(",", $sample);
$final = array();
foreach($items as $i){
$value = explode(" ", trim($i));
$final[$value[1]] = $value[0];
}
echo "<pre>";
print_r($final);
echo "</pre>";
答案 4 :(得分:0)
如果你想回复“5ml牛奶”:
echo $second_slice[0][0] . " " . $second_slice[0][1];
回声“5ml水”;
echo $second_slice[1][0] . " " . $second_slice[1][1];
回声“3pcs胡萝卜”;
echo $second_slice[2][0] . " " . $second_slice[2][1];