php - 在php中查找数组键并获取值
问题描述
joomla/virtuemart/stockable 自定义字段
我有一个多维数组(virtuemart $product),我想获取子产品(和 array_sum)的库存值。
有没有更简单的方法来做到这一点?位置也可能发生变化。 类似 find_key -> 获取 array_sum
if (array_key_exists('customfieldsSorted', $product)) {
echo array_sum(array_column(
$product->customfieldsSorted['addtocart'][0]->stockableCombinations->combinations,
'stock'
));
}
//return 999 - this is the value I need
//array
if (array_key_exists('customfieldsSorted', $product)) {
print_r($product->customfieldsSorted['addtocart'][0]->stockableCombinations->combinations);
}
//return
Array
(
[0] => Array
(
[product_id] => 72
[customfield_ids] => Array
(
[0] => 13
)
[stock] => 99
)
[1] => Array
(
[product_id] => 73
[customfield_ids] => Array
(
[0] => 14
)
[stock] => 99
)
[n] => Array
(......)
)
解决方案
好吧,我认为您的解决方案还不错。但这可能会帮助您提高其可读性:
<?php declare(strict_types=1);
function sumColumns(array $list, string $column): int {
return array_sum(array_column($list, $column));
}
function sumStock(array $fields): int {
$list = $fields[0]->stockableCombinations->combinations;
return sumColumns($list, 'stock');
}
// Usage example:
/** This works as a "fixture function" to create a class with some data */
function newProduct(): \stdClass {
$combinations = new \stdClass();
$combinations->combinations = [['stock' => 10],['stock' => 20],/*...*/];
$cart = new \stdClass();
$cart->stockableCombinations = $combinations;
$product = new \stdClass();
$product->customfieldsSorted = ['addtocart' => [$cart]];
return $product;
}
$product = newProduct();
$stock = 0;
if (isset($product->customfieldsSorted['addtocart'])) {
$stock = sumStock($product->customfieldsSorted['addtocart']);
}
var_dump($stock); //$stock === 30
推荐阅读
- typescript - 是否可以在 Jasmine 单元测试中修改或模拟 Typescript 类使用的 Inversify 容器?
- python - 更新后无法打开spyder
- groovy - 如何在 groovy 中捕获异常?
- html - 视差透明滚动效果,“窗帘” div 放置在视差 div 之外
- mysql - 当表2中的新外键时自动在表1中创建主键?
- matlab - Matlab 数据从非结构化二维网格到粗结构化二维网格的插值
- python - 具有最初隐藏/静音图例组的散景图
- python - 在 Python 3 中使用 itertools() 一次遍历 3 行
- xamarin.android - 如何在xamarin android中将状态栏和工具栏与渐变相结合
- javascript - Next.js 中的 getInitialProps() 方法中可以使用 state 或调用其他方法吗?