Php 将函数应用于每个数组键
我正在使用Cassandra,我已经将一些字节表示保存为ID。一切正常,但是数据(ID)对输出没有好处Php 将函数应用于每个数组键,php,arrays,cassandra,Php,Arrays,Cassandra,我正在使用Cassandra,我已经将一些字节表示保存为ID。一切正常,但是数据(ID)对输出没有好处 $users = $db->get('1'); echo '<pre>'; print_r($users); die(); 正如您所看到的,ID是一些wierd字符,这是因为它们是数据库中的字节表示。它们实际上看起来像\xf5*B\xa0X\x00\x11\xe1\x99y\xbf~p\xbc\xd1~ 在PHPCASSA中有函数CassandraUtil::import(
$users = $db->get('1');
echo '<pre>';
print_r($users);
die();
正如您所看到的,ID是一些wierd字符,这是因为它们是数据库中的字节表示。它们实际上看起来像\xf5*B\xa0X\x00\x11\xe1\x99y\xbf~p\xbc\xd1~
在PHPCASSA中有函数CassandraUtil::import()代码>我可以将这些字节传递给它,它将返回guid。它工作正常,但我希望我的数组能够自动从字节转换为guid
我找到的唯一选择是循环遍历数组中的每个项并为其分配新值。不知何故,我认为这不是最好的办法。还有其他方法吗
TL;博士
具有如上所述的字节数组,需要使用CassandraUtil::import()对数组键和id进行编码>以获取可读id。最有效的方法是什么。更新
很抱歉,只看到了顶级数组键,我认为您必须运行下面的函数以及之后的另一个函数:
function cassImportWalk($item, &$key)
{
$key = CassandraUtil::import();
}
$array = array_walk($array, 'cassImportWalk');
应该将其应用于ID字段。如果您需要首先检查数据,可能有一种方法可以检测编码,但我不确定如何做到这一点
您应该能够创建一个函数,并使用它遍历数组和更新键。比如:
$users = $db->get('1');
$keys = array_keys($users);
$readableKeys = array_map("CassandraUtil::import",$keys);
foreach($users as $currentKey => $subArray) {
$readableKey = array_shift($readableKeys);
$subArray['id'] = $readableKey;
$users[$readableKey] = $subArray;
unset($users[$currentKey]);
}
未经测试(也可能需要更改CassandraUtil的用法),但应该可以工作 更新
很抱歉,只看到了顶级数组键,我认为您必须运行下面的函数以及之后的另一个函数:
function cassImportWalk($item, &$key)
{
$key = CassandraUtil::import();
}
$array = array_walk($array, 'cassImportWalk');
应该将其应用于ID字段。如果您需要首先检查数据,可能有一种方法可以检测编码,但我不确定如何做到这一点
您应该能够创建一个函数,并使用它遍历数组和更新键。比如:
$users = $db->get('1');
$keys = array_keys($users);
$readableKeys = array_map("CassandraUtil::import",$keys);
foreach($users as $currentKey => $subArray) {
$readableKey = array_shift($readableKeys);
$subArray['id'] = $readableKey;
$users[$readableKey] = $subArray;
unset($users[$currentKey]);
}
未经测试(也可能需要更改CassandraUtil的用法),但应该可以工作 除非我误解了这个问题,否则可以简单明了地这样做:
除非我误解了这个问题,否则这可以简单明了地做到:
将array\u flip(),但是,它不起作用,因为并非所有元素都像ID。使用“try”这样只对他可以更改的元素执行操作是否是个好主意?array\u walk
,应该只影响顶级数组。对于内部数组,我们可能需要执行不同的函数/采用不同的过程。我会更新我的答案@Qmal,已更新。就尝试而言,它是否引发异常?如果是这样的话,继续尝试,并在需要时捕获/处理错误。我不知道这样更改密钥是否是一个好主意。从文档中可以看出:“只有数组的值可能会被更改;它的结构不能被更改,也就是说,程序员不能添加、取消设置或重新排序元素。如果回调不遵守这一要求,那么这个函数的行为是未定义的,并且是不可预测的。”是的,我似乎已经略过了这一点,在深入研究它之前可能值得测试。是的,我试过了,但是它不起作用,因为不是所有的元素都像ID。使用“try”这样只对他可以更改的元素执行操作是否是个好主意?array\u walk
,应该只影响顶级数组。对于内部数组,我们可能需要执行不同的函数/采用不同的过程。我会更新我的答案@Qmal,已更新。就尝试而言,它是否引发异常?如果是这样的话,继续尝试,并在需要时捕获/处理错误。我不知道这样更改密钥是否是一个好主意。从文档中可以看出:“只有数组的值可能会被更改;它的结构不能被更改,也就是说,程序员不能添加、取消设置或重新排序元素。如果回调不遵守这一要求,那么这个函数的行为是未定义的,并且是不可预测的。”是的,我似乎已经略过了这一点,也许值得在深入研究之前进行测试。不。这些值不保证是唯一的或适合作为键。否。这些值不能保证是唯一的或适合作为键。