Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将函数应用于每个数组键_Php_Arrays_Cassandra - Fatal编程技术网

Php 将函数应用于每个数组键

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(

我正在使用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()我可以将这些字节传递给它,它将返回guid。它工作正常,但我希望我的数组能够自动从字节转换为guid

我找到的唯一选择是循环遍历数组中的每个项并为其分配新值。不知何故,我认为这不是最好的办法。还有其他方法吗

TL;博士
具有如上所述的字节数组,需要使用
CassandraUtil::import()以获取可读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,已更新。就尝试而言,它是否引发异常?如果是这样的话,继续尝试,并在需要时捕获/处理错误。我不知道这样更改密钥是否是一个好主意。从文档中可以看出:“只有数组的值可能会被更改;它的结构不能被更改,也就是说,程序员不能添加、取消设置或重新排序元素。如果回调不遵守这一要求,那么这个函数的行为是未定义的,并且是不可预测的。”是的,我似乎已经略过了这一点,也许值得在深入研究之前进行测试。不。这些值不保证是唯一的或适合作为键。否。这些值不能保证是唯一的或适合作为键。