String爆炸了两次数组foreach循环

时间:2014-01-20 15:28:35

标签: php arrays loops explode

我有这段代码:

$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。我怎么不避免它被取出?因为它们是独立的成分。

5 个答案:

答案 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];