我有以下数组:
Array
(
[Ingredient 1 Amount] => Array
(
[0] => 2
)
[Ingredient 1] => Array
(
[0] => lemon juice (t fresh-squeezed)
)
[Ingredient 2 Amount] => Array
(
[0] => 3
)
[Ingredient 2] => Array
(
[0] => 1/2 cups peeled and diced potatoes
)
[Ingredient 3 Amount] => Array
(
[0] => 1/3
)
[Ingredient 3 Size] => Array
(
[0] => cup
)
[Ingredient 3] => Array
(
[0] => diced celery
)
[Ingredient 4 Amount] => Array
(
[0] => 1/3
)
[Ingredient 4 Size] => Array
(
[0] => cup
)
[Ingredient 4] => Array
(
[0] => finely chopped onion
)
[Ingredient 5 Amount] => Array
(
[0] => 5
)
[Ingredient 5 Size] => Array
(
[0] => tablespoons
)
[Ingredient 5] => Array
(
[0] => pickles
)
)
每个成分集包括Amount,Size和Default。可能有一个或可能有一些丢失,所以我不能只计算数组并除以3.我需要知道数组中有多少成分集。这是由最后一个成分集显示的,所以在这种情况下我想要数字" 5"。我该怎么做呢?
- 编辑 -
该数组是从wordpress中的自定义帖子字段构建的。这是我从
回来的$post_meta = get_post_meta($id);
答案 0 :(得分:1)
在我看来,你应该重新组织你的阵列。它没有优化。
尝试一下(这是psuedo代码提供的想法)
[Ingredient 1] => Array
(
[type] => lemon juice (t fresh-squeezed),
[Amount] => lemon juice (t fresh-squeezed),
[Size] => lemon juice (t fresh-squeezed)
)
答案 1 :(得分:0)
你可以找到像这样的最大值
$max = 0;
foreach($array as $key => $value) {
if(intval(str_replace("Ingredient ", "", $key)) > $max) {
$max = intval(str_replace("Ingredient ", "", $key));
}
}
注意:作为Styphon在评论中提到如果你想得到最后一个元素编号,没有必要遍历整个数组,只处理最后一个元素
答案 2 :(得分:0)
正如我在评论中提到的,重组数组会好得多,因为您当前的结构对您想要做的事情没有帮助。但是,假设这不是一个选项,那么该做什么:
$key = end(array_keys($array));
$num = substr($key, 11);
您可以在工作here on eval.in中看到此示例。
如果最后一个键并不总是你想要的那个,这将有效:
$keyArr = array_keys($array);
$keyRev = array_reverse($keyArr);
foreach($keyRev as $key) {
if(stripos($key, 'amount') === FALSE && stripos($key, 'size') === FALSE) {
$num = substr($key, 11);
break;
}
}
echo $num;
您可以在工作here on eval.in中看到此示例。
答案 3 :(得分:0)
$a = array(
array(['ingediant1'] =>
array(
'amount' => 1,
'description' => 'whatever'
)
)
);
$amount = 0;
foreach ($a as $ingediant => $info) {
$amount += $info['amount'];
}
如果您按照我的方式重新构建阵列,您应该能够轻松获得总成分。